代码之家  ›  专栏  ›  技术社区  ›  Colin R. Turner

如何使用变量名引用哈希?

  •  0
  • Colin R. Turner  · 技术社区  · 7 年前

    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
    
    3 回复  |  直到 7 年前
        1
  •  5
  •   mob    7 年前

    %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' .

    *-除非你正在跑步 使用严格的“refs” ,你应该是

        2
  •  3
  •   shawnhcorey    7 年前

    使用哈希来包含哈希。

    my %texts = (
        TEXT1 => { 1 => 'Hello world', },
        TEXT2 => { 1 => 'Hello Mars', },
        TEXT3 => { 1 => 'Hello Venus', },
    )
    
    my $hash_name = 'TEXT1';
    
    print $texts{$hash_name}{1}, "\n";
    
        3
  •  0
  •   James E Keenan    7 年前

    以下代码是对标量的赋值,而不是对哈希的赋值:

    my $hash_name = 'TEXT';
    

    以下代码是哈希的赋值:

    my %hash = ( alpha => 'beta', gamma => 'delta' );
    

    print $hash{alpha}, "\n";
    

    您可以引用该哈希并将其分配给变量:

    my $hashref = \%hash;
    

    从中可以打印该hashref中的单个元素:

    print $hashref->{alpha}, "\n";