在 perl 中,用于打开文件的旧 2 参数版本open
(即)已弃用。出于安全原因,应将其替换为 3 参数版本。不过,有一种情况下,3 参数版本的行为与 2 参数版本不同:open FILEHANDLE,EXPR
open FILEHANDLE,MODE,EXPR
2-argopen
将特殊文件名解释-
为标准输入。例如,
echo foo | perl -e 'open my $fh, "-"; $_ = <$fh>; print $_;'
和
echo foo | perl -e 'open my $fh, "<-"; $_ = <$fh>; print $_;'
产生输出foo
。在 3 参数版本中,的特殊解释-
已经消失:
echo foo | perl -e 'open my $fh, "<", "-"; $_ = <$fh>; print $_;'
不打印任何内容。
open
使用 3-arg 来模拟 2-arg 的这个特性的标准或推荐方法是什么open
?(在具体应用中,文件名是程序的一个参数,可能是也可能不是-
。)
对于与这些 2 个参数的快捷方式等效的 3 个参数形式,请参阅有关复制文件句柄的部分
perldoc -f open
:请注意,
-
是一个与任何文件名一样有效的文件名,这是避免使用 2-args 形式的原因之一open
。如果您希望程序
-
在打开进行读取时将其处理为 stdin(并且uname|
表示名为 的文件uname|
,而不是 的输出和的 2 参数形式支持的uname
其他危险 特殊情况open
),您需要手动完成: