繁体   English   中英

如何正确删除Perl中的回车?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM