2009-11-24 43 views
5
# 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中的数组元素?

+5

没有人提到它,但查看数据结构食谱。它有很多用于在各种嵌套结构中创建和访问数据的示例。您可以使用命令“perldoc perldsc”在您的机器上读取它,您也可以在http://perldoc.perl.org/perldsc.html – daotoad 2009-11-24 22:05:15

+1

上找到它。另外,请参阅http://perlmonks.org/?node=引用+快速+引用 – ysth 2009-11-24 23:48:51

回答

3

你在你的程序中的一些错误:在@my_array前方第一线

  1. 新增my
  2. 变化的[...](...)

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

    我做了三个转变第一行

  3. 在@my_array前添加一个\ o n第二行
+0

也可以添加反斜杠将数组转换为引用。阅读这里的参考资料:http://perldoc.perl.org/perlref.html – 2009-11-24 21:47:58

14

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

您可以与参考正常工作,作为一个标量:

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

或者你可以用列表的列表时,把它变成散列工作,只有创建参考:

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

尝试以下修正:

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/

10

如果你只有把这个在你的脚本的顶部:

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. 
  • 您创建了一个数组引用,并试图将其分配到一个数组 - 见perldoc perldata对于如何声明数组
  • 试图将一个数组赋值给一个哈希(你只能将标量,如数组引用 - 有关参考的更多信息,请参阅perldoc perlref
  • 您需要取消引用散列元素以获取数组元素,例如$my_hash{"Kunjan"}->[0] - 再次看到perldoc perlref如何取消引用hashref
+0

不需要箭头:'$ my_hash {Kunjan} [0]'将起作用。 – friedo 2009-11-24 23:03:17

+0

@friedo:呵呵,我不认为' - >'糖在第一个' - >'之前工作。整齐。 – Ether 2009-11-25 00:29:43

0

其他已经解释好听什么是什么,但我想补充一点,(特别是如果你是新来的Perl),如果你花这将是巨大的一段时间,并阅读perldscperllol文档。

相关问题