我见过两种变体:
say STDERR 'hello world';
say {*STDERR} 'hello world';
有什么不同吗?安全考虑,最佳实践,......?
答案 0 :(得分:2)
我会说第一个变体是表达它的惯用方式,我不认为我见过第二个变体用于简单的文件句柄。
第二个变体是一个更通用的构造的简单示例,您可以动态地决定文件句柄。例如,编写类似以下代码可能很有用:
say { $errors_on_stderr ? *STDERR : *STDOUT } "hello world";
使用变量来决定应该使用哪个文件句柄。您可以在大括号内使用任何perl表达式。另一个例子是,如果您将文件句柄存储在哈希中。然后可能需要写
my $data = { fh => *STDOUT };
say { $data->{fh} } "Hello world";
但在你的简单案例中,我会选择第一个版本。