perl - 做 "$var = *$self->{class_var};"是什么意思

标签 perl

我试图搜索这个,但什么也没找到。

我只是好奇为什么有人会在下面的场景中加上星号:

$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/

相关文章:

perl - 为什么 SSL Web 访问在交互式 shell 中以 root 身份工作,但在提交后脚本中不能以用户 `apache` 身份工作?

perl - 如何加载相对于模块路径的文件?

perl - 将 TAP::Formatter::JUnit 与 Mojolicious 测试一起使用?

xml - 如何更改 XML 以使用空元素标记?

multithreading - perl:在不按 “enter”的情况下不会退出

perl - 如何索引一个哈希

linux - 如果没有值,则在文件中添加零值。

perl - 为什么在没有粗逗号和严格的 `use` 行上允许使用前导连字符选项?

perl - 连续的运算符和括号

perl - 我如何告诉 WWW::Mechanize 忽略安全 cookie?