如何在Perl中访问存储在哈希中的数组元素?

unj*_*nj2 5 perl hash perl-data-structures

  # 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];
Run Code Online (Sandbox Code Playgroud)

我是Perl的新手.请帮我.

Ada*_*ire 14

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

您可以正确使用引用,作为标量:

$my_array = ["aa" , "bbb"];
$my_hash{"Kunjan"} = $my_array;
Run Code Online (Sandbox Code Playgroud)

或者您可以将列表作为列表使用,只有在将其放入哈希时才创建引用:

@my_array = ("aa" , "bbb");
$my_hash{"Kunjan"} = \@my_array;
Run Code Online (Sandbox Code Playgroud)


Eth*_*her 10

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

use strict;
use warnings;
Run Code Online (Sandbox Code Playgroud)

...你会得到一些错误信息表明错误:

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.
Run Code Online (Sandbox Code Playgroud)

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

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


Pet*_*and 3

您的程序中有一些错误:

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

我做了三个改变:

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