这里的生产大多的快速简便的方法:
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, 1, 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
函数的源也有代码位,显示“绑定”和“未知”,但不应该有办法让那些没有用内部搞乱。 Blead也有一个有趣的“REGEXP”(不同于上面的“Regexp”);如果有人知道如何让ref
的收益率...
作为'该死的'这个名字是令人愉快的,它是不可能的,你会想要删除祝福。使用'Scalar :: Util :: reftype()'来查看过去的'bless'到底层的引用类型。 – 2009-09-09 15:20:35
该死!我忘了Scalar :: Util! :-D不幸的是,我似乎无法用它来让'ref'返回“IO”。我会添加一个关于'该死的'不严重的警告;感谢您的提醒。 – 2009-09-09 15:33:41