加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何让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产生…

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读