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

bxjv4tth  于 2023-02-05  发布在  Perl
关注(0)|答案(1)|浏览(247)

我有一个代码看起来像这样

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命令那样完全删除所有的回车符。

guykilcj

guykilcj1#

说实话你看起来有点困惑。
反引号内的代码是shell运行的命令,需要传递一个文件名,文件名在变量$file中,但传递给它的变量$dosFile包含一个文件句柄(字符串化为“GLOB(0x 148 b 990)”--因此出现错误消息)。
所以你打开文件的所有工作都白费了。实际上,你想要的只是:

`perl -p -i -e "s/\r//g" $file`

但是您的系统几乎肯定安装了dos2unix

`dos2unix $file`

我还应该指出,只有当您希望捕获命令的输出时,才需要使用反勾号,如果不需要输出(如本例),则应该使用system()

system('dos2unix', $file);

相关问题