Это кажется избыточным, запуск Perl из самого сценария Perl.
my $Pref = "&*())(*&^%$#@!";
system("perl -pi -e 's|^SERVERNAME.*\$|SERVERNAME \"\Q$Pref\E\"|g' pserver.prefs");
Какой фактический код Perl будет имитировать -pi? Я просто хочу что-то, что будет работать, как sed на Perl, настолько просто, насколько это возможно.
Основываясь на сайте Тодда Гарднера, кажется, что он в основном просто читает и записывает весь файл, пытаясь применить регулярное выражение к каждой строке. Решение было немного сложным для такого начинающего пользователя 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);
Что-то не так с использованием двух открытий? Следует ли этого избегать или это просто для простого решения?
Должен признать, что команда system sed намного проще и понятнее.