我正在使用从 perl 脚本嵌套的 perl 系统调用:
$file1 = shift @ARGV;
system("cat file.txt | perl -pi -e 's/OUTPUT/$file1/'");
问题在于,如果 $file1 包含诸如 @ 之类的字符,那么以这种方式使用它就会产生问题。有没有办法告诉 perl 它应该“转义”任何 $file1 包含的内容,而不是将 @... 视为一个数组?
我正在使用从 perl 脚本嵌套的 perl 系统调用:
$file1 = shift @ARGV;
system("cat file.txt | perl -pi -e 's/OUTPUT/$file1/'");
问题在于,如果 $file1 包含诸如 @ 之类的字符,那么以这种方式使用它就会产生问题。有没有办法告诉 perl 它应该“转义”任何 $file1 包含的内容,而不是将 @... 视为一个数组?
引用元。
但是你为什么要产生第二个 Perl 进程呢?您可以在同一个脚本中执行此操作。
my $file = shift;
{
local $^I = '';
local @ARGV = ('file.txt');
while (<>) {
s/OUTPUT/$file1/;
print;
}
}
不需要从 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);