【问题标题】:How do I access the array's element stored in my hash in Perl?如何访问存储在 Perl 哈希中的数组元素?
【发布时间】:2010-12-20 01:40:43
【问题描述】:
  # I have a hash 
  my %my_hash;

 # I have an array
  @my_array = ["aa" , "bbb"];

 # I store the array in my hash
  $my_hash{"Kunjan"} = @my_array;

 # But I can't print my array's element
  print $my_hash{"Kunjan"}[0];

我是 Perl 的新手。请帮帮我。

【问题讨论】:

标签: perl hash perl-data-structures


【解决方案1】:

其他人已经很好地解释了什么是什么,但我想补充一点(尤其是如果您是 Perl 新手),如果您花一些时间阅读 perldscperllol 文档会很棒。

【讨论】:

    【解决方案2】:

    试试这些修改:

    my %my_hash;
    
    # ["aa" , "bbb"] produces an array reference.  Use () instead
    my @my_array = ("aa" , "bbb");
    
    # 'Kunjan' hash is given reference to @my_array
    $my_hash{ Kunjan } = \@my_array;
    
    # bareword for hash key is nicer on the eye IMHO
    print $my_hash{ Kunjan }[0];
    


    但是,如果您使用这种方法,您还需要考虑一件事:

    unshift @my_array, 'AA';
    print $my_hash{ Kunjan }[0];    # => AA - probably not what u wanted!
    


    所以你可能追求的是:

    $my_hash{ Kunjan } = ["aa" , "bbb"];
    

    那么哈希不再引用@my_array。

    /I3az/

    【讨论】:

      【解决方案3】:

      如果您只将其放在脚本的顶部:

      use strict;
      use warnings;
      

      ...您会收到一些错误消息,指出问题所在:

      Global symbol "@my_array" requires explicit package name at kunjan-array.pl line 8.
      Global symbol "@my_array" requires explicit package name at kunjan-array.pl line 11.
      

      所以,首先用my @my_array; 声明数组,然后你会得到:

      Can't use string ("1") as an ARRAY ref while "strict refs" in use at kunjan-array.pl line 14.
      
      • 您创建了一个 arrayref 并尝试将其分配给一个数组 - 请参阅 perldoc perldata 了解如何声明一个数组
      • 您试图将数组分配给哈希(您只能分配标量,例如 arrayref - 有关引用的更多信息,请参阅 perldoc perlref
      • 您需要取消引用哈希元素以获取数组元素,例如$my_hash{"Kunjan"}->[0] - 再次参见 perldoc perlref 了解如何取消引用 hashref

      【讨论】:

      • @friedo: 嗯,我不认为-> 糖在第一个-> 之前起作用。整洁。
      【解决方案4】:

      您的数组语法不正确。您正在创建一个匿名列表引用,@my_array 是一个包含该引用的单元素列表。

      您可以以标量的形式正确使用引用:

      $my_array = ["aa" , "bbb"];
      $my_hash{"Kunjan"} = $my_array;
      

      或者您可以将列表用作列表,仅在将其放入散列时创建引用:

      @my_array = ("aa" , "bbb");
      $my_hash{"Kunjan"} = \@my_array;
      

      【讨论】:

        【解决方案5】:

        您的程序中有一些错误:

        my @my_array = ("aa" , "bbb");
        $my_hash{"Kunjan"} = \@my_array;
        print $my_hash{"Kunjan"}[0];
        

        我做了三处改动:

        1. 在第一行@my_array前面添加my
        2. 将第一行的[...]改为(...)
        3. 在第二行的@my_array 前面添加\

        【讨论】:

        猜你喜欢
        • 2013-11-01
        • 2021-08-01
        • 2015-06-26
        • 1970-01-01
        • 1970-01-01
        • 2013-03-08
        • 2016-12-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多