[英]How to remove carriage return in Perl properly?
我有一个看起来像这样的代码
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;
}
此外,当我在子例程之外或在主 function 中使用 perl 命令时,该命令有效。但是当我创建一个单独的子例程以将 dos 转换为 unix 时,我收到一条错误消息:
sh: -c: line 0: syntax error near unexpected token `('
//g" GLOB(0x148b990)' -p -i -e "s/
其中我不明白。
另外,我也试过 dos2unix 但出于某种原因,它并没有像 perl 命令那样完全删除所有回车。
老实说,你似乎有点困惑。
反引号中的代码是由 shell 运行的命令。它需要传递一个文件名。 您在变量$file
中有您的文件名,但是您将它传递给包含文件句柄的变量$dosFile
(字符串化为“GLOB(0x148b990)” - 因此您的错误消息)。
所以你打开文件的所有工作都被浪费了。 真的,你想要的只是:
`perl -p -i -e "s/\r//g" $file`
但是您的系统几乎肯定安装了dos2unix
。
`dos2unix $file`
我还应该指出,只有当您想从命令中捕获 output 时才需要使用反引号。 如果在这种情况下,您不需要 output,那么您应该改用system()
。
system('dos2unix', $file);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.