1

我正在使用从 perl 脚本嵌套的 perl 系统调用:

$file1 = shift @ARGV;
system("cat file.txt | perl -pi -e 's/OUTPUT/$file1/'");

问题在于,如果 $file1 包含诸如 @ 之类的字符,那么以这种方式使用它就会产生问题。有没有办法告诉 perl 它应该“转义”任何 $file1 包含的内容,而不是将 @... 视为一个数组?

4

2 回答 2

4

引用元

但是你为什么要产生第二个 Perl 进程呢?您可以在同一个脚本中执行此操作。

my $file = shift;
{
    local $^I = '';
    local @ARGV = ('file.txt');
    while (<>) {
        s/OUTPUT/$file1/;
        print;
    }
}
于 2012-06-19T16:10:49.590 回答
3

不需要从 perl 内部调用 perl。像这样的东西应该工作:

my $file1 = shift;
my @data;
open(my $fh, '<+', 'file.txt') or die $!;
while (<$fh>) {
   $_ =~ s/OUTPUT/$file1/;
   push(@data, $_);
}

seek($fh, 0, 0);
truncate($fh, 0);

for my line (@data) {
   print ${fh} $line;
}
close($fh);
于 2012-06-19T16:08:42.270 回答