我有一个代码看起来像这样
sub ConvertDosToUnix{
my $file = shift;
open my $dosFile, '>', $file or die "\nERROR: Cannot open $file";
select $dosFile;
print("Converting Dos To Unix");
`perl -p -i -e "s/\r//g" $dosFile`;
close $dosFile;
}
另外,当我在子例程之外或在main函数中使用perl命令时,perl命令也可以工作,但是当我创建一个单独的子例程来将dos转换为unix时,我得到了一个错误消息:
sh: -c: line 0: syntax error near unexpected token `('
//g" GLOB(0x148b990)' -p -i -e "s/
我不明白。
此外,我还尝试了dos2unix,但由于某种原因,它并没有像perl命令那样完全删除所有的回车符。
1条答案
按热度按时间guykilcj1#
说实话你看起来有点困惑。
反引号内的代码是shell运行的命令,需要传递一个文件名,文件名在变量
$file
中,但传递给它的变量$dosFile
包含一个文件句柄(字符串化为“GLOB(0x 148 b 990)”--因此出现错误消息)。所以你打开文件的所有工作都白费了。实际上,你想要的只是:
但是您的系统几乎肯定安装了
dos2unix
。我还应该指出,只有当您希望捕获命令的输出时,才需要使用反勾号,如果不需要输出(如本例),则应该使用
system()
。