これは、Perl スクリプト自体から perl を実行する冗長なようです。
my $Pref = "&*())(*&^%$#@!";
system("perl -pi -e 's|^SERVERNAME.*\$|SERVERNAME \"\Q$Pref\E\"|g' pserver.prefs");
-pi を模倣する実際の Perl コードは何ですか? Perl の sed のように機能するものを、できる限りシンプルにしたいだけです。
Todd Gardner のサイトに基づくと、基本的にすべてのファイルを読み書きし、すべての行に正規表現を適用しようとしているようです。この解決策は、私のような初心者の 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 コマンドの方がはるかにシンプルでクリーンであることは認めざるを得ません。