![](/img/trans.png)
[英]Perl - How do I update (and access) an array stored in array stored in a hash?
[英]How do I access the array's element stored in my hash in Perl?
# 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的新手。 请帮我。
您的数组语法不正确。 您正在创建匿名列表引用, @my_array
是包含该引用的单元素列表。
您可以正确使用引用,作为标量:
$my_array = ["aa" , "bbb"];
$my_hash{"Kunjan"} = $my_array;
或者您可以将列表作为列表使用,只有在将其放入哈希时才创建引用:
@my_array = ("aa" , "bbb");
$my_hash{"Kunjan"} = \@my_array;
如果您只将它放在脚本的顶部:
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;
声明数组my @my_array;
然后你会得到:
Can't use string ("1") as an ARRAY ref while "strict refs" in use at kunjan-array.pl line 14.
$my_hash{"Kunjan"}->[0]
- 再次查看perldoc perlref以了解如何取消引用hashref 您的程序中有一些错误:
my @my_array = ("aa" , "bbb");
$my_hash{"Kunjan"} = \@my_array;
print $my_hash{"Kunjan"}[0];
我做了三个改变:
@my_array
面前添加了my
[...]
更改为(...)
\\
试试这些修正:
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 /
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.