【发布时间】:2010-04-26 13:07:23
【问题描述】:
我有一个接受输入和输出文件参数的 perl 程序,我想支持使用 "-" 指定标准输入/输出的约定。问题是我不能只打开文件名,因为open(my $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 文件句柄来为输入执行此操作,但这不适用于输出。
编辑:我被告知 open 的 2 参数形式实际上具有我正在寻找的魔力。不幸的是,它还做了一些创造性的解释,以便将文件名与第二个参数中的模式分开。我猜open 的 3 参数形式是 100% 无魔法的——它总是会打开你告诉它的 exact 文件。我在问我是否可以为 "-" 设置一个例外,同时仍然明确地处理所有其他文件名。
我应该将我的代码从上面粘贴到子程序/模块中并停止抱怨吗?
【问题讨论】:
-
事实证明,没有一种内置的方式可以同时变魔术和变魔术。所以我想我会自己写。