我的perl脚本中有以下行(我从cshell运行)
system("perl -p -i -e 's/\+[a-z]+\+//g' $file1");
Run Code Online (Sandbox Code Playgroud)
我希望它删除所有被+加号包围的单词.相反,我收到以下错误消息.
量词在正则表达式中没有任何关系; 标记为< - HERE,m/+ < - HERE [az] ++/at -e line 1.
怎么了?我给反斜杠,为什么然后这个错误?
让我们说$file1
包含-foo bar.txt
,字符串文字
"perl -p -i -e 's/\+[a-z]+\+//g' $file1"
Run Code Online (Sandbox Code Playgroud)
产生字符串
perl -p -i -e 's/+[a-z]++//g' -foo bar.txt
^ ^ ^ ^
| | | |
+---- errors ----+
Run Code Online (Sandbox Code Playgroud)
不需要时不要创建shell命令.perl
直接启动.
system("perl", "-p", "-i", "-e", 's/\+[a-z]+\+//g', '--', $file1)
Run Code Online (Sandbox Code Playgroud)
但为什么要创建一个新流程呢?您可以使用以下内容完成相同的操作!
{
local @ARGV = $file1;
local $^I = '';
while (<>) {
s/\+[a-z]+\+//g;
print;
}
}
Run Code Online (Sandbox Code Playgroud)
或作为子:
sub fixer {
my $pat = shift;
local @ARGV = @_;
local $^I = '';
while (<>) {
s/$pat//g;
print;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3849 次 |
最近记录: |