在perl中打开文件时,如果文件名为“ – ”,如何自动使用STDIN /
发布时间:2020-12-16 06:16:15 所属栏目:大数据 来源:网络整理
导读:我有一个带有输入和输出文件参数的perl程序,我想支持使用“ – ”指定标准输入/输出的约定.问题是我不能只打开文件名,因为open(我的$input,’',' - ')打开一个名为 - 的文件,而不是标准输入.所以我必须做这样的事情: my $input_fh;if ($input_filename eq '
我有一个带有输入和输出文件参数的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:
注意<模式在2参数形式中是可选的,因此“< - ”是完全合法的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |