在 Perl 中,如果一个变量保存了另一个变量的名称,我如何使用第一个变量来访问另一个变量?
例如,让
$name = "bob";
@bob = ("jerk", "perlfan");
我应该如何使用 $name 来了解鲍勃是什么样的人?
虽然我不太确定,但我模糊的内存告诉我它可能与 typeglob 有关。
最佳答案
几点:
见 perlreftut有关引用(符号和其他)的更多信息。
见 perldsc获取使用数据结构的帮助。
见 perlmod有关 typeglob 的更多信息。
见 perlsub有关词法变量的更多信息。
下面是一个使用锁定散列来控制基于变量内容的数据访问的示例:
use strict;
use warnings;
use Hash::Util qw( lock_hash unlock_hash );
my %data;
lock_hash( %data );
#Altering %data is a fatal exception.
unlock_hash( %data );
%data = (
'bob' => [ 'jerk', 'genius' ],
);
lock_hash( %data );
for my $name (qw/ bob margaret /) {
my $info = $data{$name}; # Fatal error when accessing data for margaret.
print "$name is a\n";
print map "\t$_\n", @$info;
}
除了所有警告之外,如果您需要使用符号引用(但您不会),则使用符号引用的语法是:
use strict;
use warnings;
my $name = 'bob';
our @bob = qw/jerk genius/;
my $qualities;
{ no strict 'refs';
print "$name: ", @$name, "\n";
$qualities = \@$name;
}
print "$name is a @$qualities\n";
注意数组
@bob
声明为 our
.符号引用仅适用于符号表中的值。换句话说,词法变量不适用于符号引用。以防万一我没有足够强调这一点,不要使用符号引用 .
关于perl - 如何在 Perl 中使用符号引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1298035/