简单的问题:
我想写一个像say
.
但它有一个不好的特性:文件句柄。
say FILEHANDLE LIST
say FILEHANDLE
say LIST
say
如何申报?是否可以?
PS:我找到了一个例子myopen(*;$)
,但它不是一回事。
PPS:我在旧的 Perl 版本中需要这个函数,因为写起来很烦人print "\n"
谢谢!
简单的问题:
我想写一个像say
.
但它有一个不好的特性:文件句柄。
say FILEHANDLE LIST
say FILEHANDLE
say LIST
say
如何申报?是否可以?
PS:我找到了一个例子myopen(*;$)
,但它不是一回事。
PPS:我在旧的 Perl 版本中需要这个函数,因为写起来很烦人print "\n"
谢谢!
Perl6::Say就是这样做的。
say FILEHANDLE TEXT
它利用 Perl 通常非常烦人的间接方法调用语法巧妙地模拟了语法。它加载IO::Handle将每个文件句柄转换为一个对象并创建IO::Handle->say
. 现在say FILEHANDLE TEXT
其实是FILEHANDLE->say(TEXT)
。
它确实有警告。从文档...
Use it just like print (except that it only supports the indirect
object syntax when the stream is a bareword). That is, assuming
the relevant filehandles are open for output, you can use any of these:
say @data;
say FH @data;
FH->say(@data);
*FH->say(@data);
(\*FH)->say(@data);
say $fh, @data;
$fh->say(@data);
but not any of these:
say {FH} @data;
say {*FH} @data;
say {\*FH} @data;
say $fh @data;
say {$fh} @data;
更新:为了更简单,我刚刚上传了Say::Compat,它加载 Perl6::Say 或use feature 'say'
取决于您的 Perl 版本。
如果不使用Devel::Declare,您可能会得到最好的结果。
say
不能由 subs 重新创建。
>perl -E"say prototype('CORE::say') // 'Special'"
Special
你需要一个调用解析器和调用检查器来实现这一点。有关示例,请参见Syntax::Feature::Loop 。