打印到STDERR或{* STDERR}?

时间:2016-03-11 09:34:21

标签: perl

我见过两种变体:

say STDERR    'hello world';

say {*STDERR} 'hello world';

有什么不同吗?安全考虑,最佳实践,......?

1 个答案:

答案 0 :(得分:2)

我会说第一个变体是表达它的惯用方式,我不认为我见过第二个变体用于简单的文件句柄。

第二个变体是一个更通用的构造的简单示例,您可以动态地决定文件句柄。例如,编写类似以下代码可能很有用:

say { $errors_on_stderr ? *STDERR : *STDOUT } "hello world";

使用变量来决定应该使用哪个文件句柄。您可以在大括号内使用任何perl表达式。另一个例子是,如果您将文件句柄存储在哈希中。然后可能需要写

my $data = { fh => *STDOUT };
say { $data->{fh} } "Hello world";

但在你的简单案例中,我会选择第一个版本。