我曾尝试搜索此内容,但一无所获。

我只是好奇为什么有人在以下情况下加上星号:

$var = *$self->{class_var};

*在这种情况下会做什么?

更新

我从Net::Telnet模块中获取了以上内容,而我只是想了解它。

实际的代码是:
$s = *$self->{net_telnet};

那么,我想知道net_telnet是软件包名称吗?

最佳答案

从一小段代码中,我假设$self拥有一个typeglob。您可以按照eugene y的方式显式地访问子元素,也可以通过在typeglob上使用任何标准的取消引用语法来隐式地访问子元素。

#!/usr/bin/perl

use strict;
use warnings;

our %test = ( class_var => "test class_var" );
our @test = qw(one four nine);

my $self = \*test;
print "Self is '$self'\n";

my $var1 = *{$self}{HASH}{class_var};
print "Var1 is '$var1'\n";

my $var2 = *$self->{class_var};
print "Var2 is '$var2'\n";

my $var3 = ${*{$self}}{class_var};
print "Var3 is '$var3'\n";

my $var4 = ${*$self}{class_var};
print "Var4 is '$var4'\n";

my $x_scale = *$self{ARRAY}[0];
print "x_scale is '$x_scale'\n";

my $y_scale = *$self->[1];
print "y_scale is '$y_scale'\n";

my $z_scale = ${*$self}[2];
print "z_scale is '$z_scale'\n";

Typeglob引用(符号别名之外)最常用于允许对象用作文件句柄的IO插槽,但是由于typeglob保留每种类型的变量中的一种,因此其他变量插槽可用于存储其他状态数据。

typeglob不必是全局的, Symbol::gensym 可以创建基本上是匿名的typeglob。

关于perl - "$var = *$self->{class_var};"是什么意思,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4970620/

10-09 03:18