如何制作perl“逃逸”字符串?

时间:2012-06-19 15:50:17

标签: perl

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

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

问题是,如果$ file1包含@等字符,则以这种方式使用它会有问题。有没有办法告诉perl它应该“逃避”$ file1包含的内容,而不是将@ ...视为一个数组?

2 个答案:

答案 0 :(得分:4)

quotemeta

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

my $file = shift;
{
    local $^I = '';
    local @ARGV = ('file.txt');
    while (<>) {
        s/OUTPUT/$file1/;
        print;
    }
}

答案 1 :(得分: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);