如何通过bless生成的Perl对象引用获取内部scalar值?
如何从该Perl对象中获取标量值
你可以直接对$obj进行解引用,因为这个对象本质就是被bless标记过的标量引用:
my $value = $$obj; print $value; # 输出 123
原理说明
这段代码里,bless do { \( my $scalar = 123; ) }, 'Some::Class' 的作用是把指向标量123的引用,关联到Some::Class类上,让它成为一个对象。但Perl的对象本质就是被bless到某个包的引用,所以不管它被标记成什么类,只要它底层是标量引用,直接解引用就能拿到对应的标量值。
你也可以用${ $obj }的写法,和$$obj效果完全一致,只是语法形式不同。如果需要先确认引用类型,也可以做个判断:
if (ref $obj eq 'SCALAR') { my $value = $$obj; print $value; }
内容的提问来源于stack exchange,提问作者НЕВСКИЙ БЛЯДИНА
相关产品推荐
相关产品推荐

