2
我想修改一個Perl腳本來註釋掉所有匹配某種模式的行。在正常的命令提示符,這裏是我想添加一行:Perl系統命令不作爲正常提示
grep -lIRZ --exclude="*\.svn*" "pattern" . | xargs -0 -l sed -i -e 's/.*pattern.*/\/\/&/g'
這是在Perl腳本的環境:
my $rmcmd = "grep -lIRZ --exclude=\"*\\.svn*\" \"pattern\" . | xargs -0 -l sed -i -e 's/.*pattern.*/\\/\\/&/g'";
runcmd($rmcmd);
...
sub runcmd {
my @cmd = @_;
print "Running: @cmd\n";
system(@cmd);
# Get status from system
my $ret = $? >> 8;
if ($ret) {
print "-E- command completed with error code $ret.\n";
exit(1);
}
return ($ret);
}
一切正常,從命令提示符下運行時,但運行相同命令的腳本總是崩潰。
什麼是不同的做法,我該如何解決它?
(1)請發佈確切的錯誤,你會得到。 (2)請打印併發布'$ rmcmd'的值 - 理想情況下,都是通過'print'和Perl調試器。 (3)正確的解決方案是將整個複雜管道重寫爲Perl代碼。 – DVK 2010-08-10 20:34:42
(1)確切的錯誤是:-E-命令以錯誤代碼1結束。
(2)打印函數返回:grep -lIRZ --exclude =「* \。svn *」「dlclose」。 | xargs -0 -l sed -i -e's /.* dlclose。*/\/\ /&/ g'
(3)我是perl的新手,runcmd已經在腳本中定義過了。用Perl代碼管道的正確方法是什麼?你能給我一些參考嗎? – user108088 2010-08-10 20:46:19
爲什麼你不用Perl做這一切?你使你的代碼不能移植。 – ghostdog74 2010-08-11 01:05:53