在perl中打开文件时,如果文件名为“ – ”,如何自动使用STDIN / OUT?

前端之家收集整理的这篇文章主要介绍了在perl中打开文件时,如果文件名为“ – ”,如何自动使用STDIN / OUT?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个带有输入和输出文件参数的perl程序,我想支持使用“ – ”指定标准输入/输出的约定.问题是我不能只打开文件名,因为open(我的$input,’<',' - ')打开一个名为 - 的文件,而不是标准输入.所以我必须做这样的事情:

my $input_fh;
if ($input_filename eq '-') {
    # Special case: get the stdin handle
    $input_fh = *STDIN{IO};
}
else {
    # Standard case: open the file
    open($input_fh,'<',$input_filename);
}

类似的输出文件.有没有办法在没有自己测试特殊情况的情况下做到这一点?我知道我可以破解ARGV文件句柄来进行输入,但这对输出不起作用.

编辑:我被告知,2参数形式的开放实际上是我正在寻找的魔法.不幸的是,它还做了一些创造性的解释,以便将文件名与第二个参数中的模式分开.我猜开放的3参数形式是100%无魔法 – 它总是打开你告诉它的确切文件.我问是否可以为“ – ”设置一个例外,同时仍然明确地处理所有其他文件名.

我应该将上面的代码粘贴到子程序/模块中并停止抱怨吗?

解决方法

改为使用双参数形式:

open ($input_fh,"< " . $input_filename);

来自man perlfunc:

In the 2-arguments (and 1-argument) form opening “‘-‘” opens
STDIN and opening “‘>-‘” opens STDOUT.

注意<模式在2参数形式中是可选的,因此“< - ”是完全合法的.

猜你在找的Perl相关文章