我试图搜索这个,但什么也没找到。
我只是好奇为什么有人会在下面的场景中加上星号:
$var = *$self->{class_var};
* 在这种情况下有什么作用?
更新
我从 Net::Telnet 模块中获取了上述内容,我只是想理解它。
实际代码是:
$s = *$self->{net_telnet};
那么,我想知道 net_telnet 是包名吗?
最佳答案
%main::some_hash = (class_var => 'xyz');
my $self = *main::some_hash;
print *$self->{class_var}, "\n"; # prints 'xyz'
简而言之,这是在符号表中传递对哈希的引用的过时方式。
*
之前 $self
取消引用 $self
中的值作为一个类型球。 ->{class_var}
然后将该 typeglob 取消引用为哈希,并查找 class_var
key 。更新:
向下挖掘类层次结构表明该对象是在
IO::Handle
中创建的。和:sub new {
my $class = ref($_[0]) || $_[0] || "IO::Handle";
@_ == 1 or croak "usage: new $class";
my $io = gensym;
bless $io, $class;
}
Symbol::gensym
返回一个完整的 typeglob,其中 IO
主要使用插槽。然而,由于它是一个完整的 typeglob,子模块正在利用这一事实并将其数据存储在各种其他 glob 字段中,即 HASH
部分。
关于perl - 做 "$var = *$self->{class_var};"是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4970620/