これはPerlスクリプト自体からPerlを実行すると冗長に見えます。プログラムの中で-piを模倣する実際のPerlコードは何ですか?
my $Pref = "&*())(*&^%$#@!";
system("perl -pi -e 's|^SERVERNAME.*\$|SERVERNAME \"\Q$Pref\E\"|g' pserver.prefs");
実際のPerlコードは、-piと同じですか?私はPerlでsedのように動作するものがほしいのと同じくらい簡単です。トッド・ガードナーのサイトに基づいて
、基本的にはすべての行に正規表現を適用しようとすると、ファイルのすべてを読み取り、書き込みようです。解決策は、私のようなnoobのPerlのユーザーのために少し複雑だったので、私は使用してそれをダウン易しく書き直さ:
my $ftp = "/home/shared/ftp";
my $backup = $ftp . ".bak";
rename($ftp, $backup);
open (FTP, "<", $backup) or die "Can't open $backup: $!";
open (FTP_OUT, ">", $ftp) or die "Can't open $ftp: $!";
while (<FTP>)
{
$_ =~ s|$panel_user \Q$panel_oldpass\E |$panel_user \Q$panel_newpass\E |g;
print FTP_OUT $_;
}
close(FTP);
close(FTP_OUT);
を2開きを使用してに何か問題はありますか?これを避けるべきか、それとも単純な解決策には向いていますか?
システムsedコマンドははるかに単純でクリーンであることを認めなければなりません。
2つのファイルを開く場合は、2つのファイルが開かれている必要があります。 Re:sedはシンプルでクリーンです。絶対にそうかもしれませんが、いくつかのプログラムは各ファイルを開き、各行をチェックし、必要に応じて置換を行い、行を出力しなければなりません。魔法の方法はありませんファイル内のデータを見ることなく、ファイルに置換をスリップさせることができます。または、もしあれば、誰かが私たちにそれを教えてくれることを願っています。 – Telemachus