Perl:如何声明和实现函数`say`

gau*_*inc 1 perl implementation declaration

简单的问题:

我想写一个像这样的函数say.

但它有一个不好的功能:文件句柄.

       say FILEHANDLE LIST
       say FILEHANDLE
       say LIST
       say 
Run Code Online (Sandbox Code Playgroud)

如何申报?可能吗?

PS:我找到了一个例子myopen(*;$),但这不是一回事.
PPS:我在旧的Perl版本中需要这个功能,因为它写起来很烦人print "\n"

谢谢!

Sch*_*ern 9

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;
Run Code Online (Sandbox Code Playgroud)

更新:为了使这更简单,我刚刚上传了Say :: Compat,它加载了Perl6 :: Say或者use feature 'say'你的Perl版本.

如果不玩Devel :: Declare,这是你可能获得的最好成绩.

  • @loldop我让这个过程更简单但是写了Say :: Compat.有关详细信息,请参阅帖子的编辑. (2认同)