如何使用变量名引用散列?
How can I reference a hash using a variable name?
我有一组预定义的哈希表,我想使用变量名引用其中一个哈希表并访问键值。即使填充了散列,以下代码也只是 returns null。我在这里做错了什么,或者有更好的方法来实现这个目标吗?
my %TEXT1 = (1 => 'Hello World',);
my %TEXT2 = (1 => 'Hello Mars',);
my %TEXT3 = (1 => 'Hello Venus',);
my $hash_name = 'TEXT1';
my $hash_ref = \%$hash_name;
print ${$hash_ref}{1}; #prints nothing
以下代码是对标量而非散列的赋值:
my $hash_name = 'TEXT';
以下代码是对哈希的赋值:
my %hash = ( alpha => 'beta', gamma => 'delta' );
要打印散列中单个元素的值,您说:
print $hash{alpha}, "\n";
您可以引用该散列并将其分配给变量:
my $hashref = \%hash;
然后您可以从该 hashref 打印单个元素:
print $hashref->{alpha}, "\n";
您的代码工作正常*
%TEXT = (1 => abc, 42 => def);
$name = 'TEXT';
print ref($name); # ""
no strict 'refs';
print ${$name}{1}; # "abc"
print $name->{42} # "def"
$ref = \%$name;
print ref($ref); # "HASH"
print $ref->{1}; # "abc"
print ${$ref}{42}; # "def"
你做错的主要是making your code an unmaintainable mess,这就是为什么在use strict 'refs'
.
下不允许这种事情的原因
* - 除非你是 use strict 'refs'
下的 运行,否则你应该是
使用散列来包含您的散列。
my %texts = (
TEXT1 => { 1 => 'Hello world', },
TEXT2 => { 1 => 'Hello Mars', },
TEXT3 => { 1 => 'Hello Venus', },
)
my $hash_name = 'TEXT1';
print $texts{$hash_name}{1}, "\n";
我有一组预定义的哈希表,我想使用变量名引用其中一个哈希表并访问键值。即使填充了散列,以下代码也只是 returns null。我在这里做错了什么,或者有更好的方法来实现这个目标吗?
my %TEXT1 = (1 => 'Hello World',);
my %TEXT2 = (1 => 'Hello Mars',);
my %TEXT3 = (1 => 'Hello Venus',);
my $hash_name = 'TEXT1';
my $hash_ref = \%$hash_name;
print ${$hash_ref}{1}; #prints nothing
以下代码是对标量而非散列的赋值:
my $hash_name = 'TEXT';
以下代码是对哈希的赋值:
my %hash = ( alpha => 'beta', gamma => 'delta' );
要打印散列中单个元素的值,您说:
print $hash{alpha}, "\n";
您可以引用该散列并将其分配给变量:
my $hashref = \%hash;
然后您可以从该 hashref 打印单个元素:
print $hashref->{alpha}, "\n";
您的代码工作正常*
%TEXT = (1 => abc, 42 => def);
$name = 'TEXT';
print ref($name); # ""
no strict 'refs';
print ${$name}{1}; # "abc"
print $name->{42} # "def"
$ref = \%$name;
print ref($ref); # "HASH"
print $ref->{1}; # "abc"
print ${$ref}{42}; # "def"
你做错的主要是making your code an unmaintainable mess,这就是为什么在use strict 'refs'
.
* - 除非你是 use strict 'refs'
下的 运行,否则你应该是
使用散列来包含您的散列。
my %texts = (
TEXT1 => { 1 => 'Hello world', },
TEXT2 => { 1 => 'Hello Mars', },
TEXT3 => { 1 => 'Hello Venus', },
)
my $hash_name = 'TEXT1';
print $texts{$hash_name}{1}, "\n";