这似乎是多余的,从 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);
使用两个打开有什么问题吗?应该避免这种情况还是简单的解决方案可以?
我必须承认,系统 sed 命令更简单、更干净。