在 Perl 中,如果一个变量保存另一个变量的名称,我如何使用第一个变量来访问另一个变量?
例如,让
$name = "bob";
@bob = ("jerk", "perlfan");
我应该如何使用 $name 来了解 Bob 是一个什么样的人?
虽然我不太确定,但我模糊的记忆告诉我这可能与 typeglob 有关。
几点:
- 你不是在谈论 typeglobs,你是在谈论象征性参考.
- 不要使用符号引用——它们会导致难以追踪错误。
- 几乎在任何情况下,当符号引用看起来是个好主意时,使用基于哈希的数据结构是最好的方法。
- 当您不想更改哈希值时,请考虑使用 Hash::Util 来锁定它们。
- 符号引用不适用于词汇变量。
- 类型团不适用于词法变量。
- 使用词汇变量。
- 不要使用符号引用。
See 佩尔勒夫图特 http://perldoc.perl.org/perlreftut.html有关参考的更多信息(符号和其他)。
看perldsc http://perldoc.perl.org/perldsc.html寻求使用数据结构的帮助。
看perlmod http://perldoc.perl.org/perlmod.html#Symbol-Tables有关类型团的更多信息。
看perlsub http://perldoc.perl.org/perlsub.html#Private-Variables-via-my()有关词汇变量的更多信息。
以下是使用锁定哈希根据变量内容控制对数据的访问的示例:
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
。符号引用仅适用于符号表中的值。换句话说,词法变量不能与符号引用一起使用。
以防万一我还没有充分强调这一点不要使用符号引用.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)