myFavourite声明有散列,但用作数组?
是的,它返回一个列表。这是一个散列片。参见:http://perldoc.perl.org/perldata.html
把它想象成数组@fruits扩展为多个散列键查找。 @hash {@keys}语法仅仅是一种提取散列部分的方便方法。
具体来说:
@myFavourite{@fruits}
相当于:
($myFavourite{'Apple'},$myFavourite{'Orange'},$myFavourite{'Grape'})
如果被叫在列表环境或在标量上下文中的所有三个元件的串联(例如打印),它返回一个三个项目列表
my @slice_values = @myFavourite{@fruits}
# @slice_values now contains ('Apple',undef,undef)
# which is functionally equivalent to:
my @slice_values = map { $myFavourite{$_} } @fruits;
如果你想只提取与密钥的散列值,做:
my @favourite_fruits = @myFavourite{ grep { exists $myFavourite{$_} } @fruits };
# @favourite_fruits now contains ('Apple')
如果您:
use warnings;
,你会看到两个未初始化值口译员的警告被autovivified作为民主基金。
来源
2009-12-07 08:50:38
zen
感谢William和Zen。 – rajachan 2009-12-07 09:04:20
有助于理解这一点的一件事是理解Perl变量中sigil变化背后的逻辑。哈希由'%'定义,如%myhash =(a => 1,b => 2),但当您返回hash的一个元素(标量)时,您将标记更改为标量:$ myhash {a} 。但是如果你想返回几个元素(一个数组),你可以相应地改变它的标签:@myhash {a,b}。如果您有@myWantedKeys =('a','b')的数组,那么您可以使用@myhash {@myWantedKeys}检索这些键的值。 – 2011-10-29 10:31:26