我正在使用嵌套在perl脚本中的perl系统调用:
$file1 = shift @ARGV;
system("cat file.txt | perl -pi -e 's/OUTPUT/$file1/'");
问题是,如果$ file1包含@等字符,则以这种方式使用它会有问题。有没有办法告诉perl它应该“逃避”$ file1包含的内容,而不是将@ ...视为一个数组?
答案 0 :(得分:4)
但是你为什么要产生第二个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);