文字列リテラルを$file1含むとしましょう-foo bar.txt
"perl -p -i -e 's/\+[a-z]+\+//g' $file1"
文字列を生成します
perl -p -i -e 's/+[a-z]++//g' -foo bar.txt
^ ^ ^ ^
| | | |
+---- errors ----+
必要のないときは、シェルコマンドを作成しないでください。perl直接起動するだけです。
system("perl", "-p", "-i", "-e", 's/\+[a-z]+\+//g', '--', $file1)
しかし、なぜまったく新しいプロセスを作成するのでしょうか。以下を使用して、まったく同じことを行うことができます。
{
local @ARGV = $file1;
local $^I = '';
while (<>) {
s/\+[a-z]+\+//g;
print;
}
}
またはサブとして:
sub fixer {
my $pat = shift;
local @ARGV = @_;
local $^I = '';
while (<>) {
s/$pat//g;
print;
}
}