如何让Perl的ref()函数返回REF,IO和LVALUE?
发布时间:2020-12-15 21:16:07 所属栏目:大数据 来源:网络整理
导读:ref()的文档提到了几个可能的返回值.我理解他们中的大部分,但不是REF,IO和LVALUE.我如何编写Perl代码以使ref返回这些值? 在阅读了typeglobs and file handles的文档之后,我使用以下代码关闭了IO: open(INPUT,'','foo.pl');print ref(*INPUT{IO}),"n"; # P
ref()的文档提到了几个可能的返回值.我理解他们中的大部分,但不是REF,IO和LVALUE.我如何编写Perl代码以使ref返回这些值?
在阅读了typeglobs and file handles的文档之后,我使用以下代码关闭了IO: open(INPUT,'<','foo.pl'); print ref(*INPUT{IO}),"n"; # Prints IO::Handle 对于REF和LVALUE,我尝试了几个奇怪的结构,但没有成功. 解决方法
这是制作大部分内容的快捷方式:
use 5.010; say 'SCALAR: ',ref undef; say 'ARRAY: ',ref [1..5]; say 'HASH: ',ref { key => 'value' }; say 'CODE: ',ref sub {}; say 'REF: ',ref undef; say 'GLOB: ',ref *_; say 'LVALUE: ',ref substr "abc",1,2; say 'LVALUE: ',ref vec 42,2; say 'FORMAT: ',ref *STDOUT{FORMAT}; # needs declaration below say 'IO: ',ref *STDIN{IO}; # actually prints IO::Handle say 'VSTRING: ',ref v5.10.0; say 'Regexp: ',ref qr/./; format = . REF只是对另一个参考的引用. LVALUE是标量的一种特殊情况,如果它被修改则会产生外部影响. IO是句柄背后的基本类型,你可以使用Acme::Damn from CPAN使它显得明显.正如Michael Carman在评论中所指出的,你真的不应该是不兼容的对象 – 不要在实际代码中使用. use Acme::Damn; say 'IO: ',ref damn *STDIN{IO}; # really prints IO ref函数的源代码也有一些显示“BIND”和“UNKNOWN”的代码,但是不应该有办法让那些没有搞乱内部的东西. Blead还有一个有趣的“REGEXP”(不同于上面的“Regexp”);如果有人知道如何让ref产生… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |