这种奇怪的兴趣来自于扩展需求,没有时间去改变设计(重构)。这当然不是好设计,但我现在需要处理它,希望稍后重构。设置一个文件句柄,以便打印到它被安静地跳过?
早期打开几个日志文件,打印到整个代码。新的要求意味着使用(新)命令行选项(--noflag
),这些日志文件之一是不相关的。
我只能在此刻做的是垫的定义(open my $fh, ...
)和所有使用它(print $fh ...
)与。这显然是不好的设计,它很容易出错(这也不是很好)。
有没有办法做$fh
东西时,它与文件相关 使任何下列print $fh ...
由intepreter接受,但会导致根本无法运行print
,没有错误? (让我想象一下,比如说$fh = VOID if $flag;
。)或者,有没有一些NULL
流或类似的东西?我所知道的全部是STDOUT
(1),STDERR
(2)和STDIN
(0)。
我不想让$fh
在其他地方打印,理想情况下甚至不需要/dev/null
(如果可以的话)。我环顾四周,找不到任何相关的东西。如果事实上它已经在那里,我会很高兴指出信息。 任何想法表示赞赏。
PS。有人问过第一个问题(经过多年的使用),请告诉我它是否关闭。
UPDATE
感谢响应。他们提示我添加/改进此问题:是否打印标记为/dev/null
可能已优化,以便“打印”实际上不会发生? (虽然我仍然对是否可以设置一个文件句柄来告诉Perl'不要在这里打印'感兴趣。)
我试图避免在没有添加条件的情况下运行void(print)语句。
更新/澄清
总结从注释位(谢谢!):这不是对性能优化的追求。我完全同意在评论中所说的一切。只是执行毫无意义的陈述(通常大约一百万)使我感到不安。另外,我对Perl没有遇到的一些可能的黑暗角落感到好奇。如果你是在UNIX操作系统,你可以使用“的/ dev/null的”
open my $fh, '>', '/dev/null' or die 'This should never happen';
开发空会默默接受所有输入上(这其中大部分已在答复/意见得到解决。)
为什么是/ dev/null的不够好?印刷本身的执行成本太高了吗?然后你需要在你的代码中添加一个条件。目标文件句柄不能阻止打印的发生(尽管你可能会重新定义打印效果......) – Thilo
@Thilo好吧。执行成本不会受到影响。但原则上我宁愿不执行无效声明。另外,我真的很好奇,是否可以设置一个文件句柄来告诉Perl'这里不打印'。 – zdim
@zdim:如果'/ dev/null'是*“足够好”*和*“执行成本不会受到影响”*那么你有你的答案。如果你创建一个临时黑客来完成工作,那么你无法真正负担执行*“无效声明”*的挑剔。打开文件句柄到'/ dev/null'。这与 – Borodin