%h1 = { 'key1' => ( 1,2,3 ),'key2' => ( 4,5,6 ) }; %h2 = { 'key1' => [ 1,3 ],'key2' => [ 4,6 ] }; print $(@h1{'key2'})[1];
Q1:h1和h2有什么区别?请不要说’一个是列表的哈希和另一个数组的哈希’…相反,我想知道在使用方面的转换.
Q2:为什么print语句中的引用$(@ h1 {‘key2’})[1]不能编译?这是我的想法:我想访问对应于’key2’的数组/列表:@ h1 {‘key2’}.然后我想访问该列表/数组中索引1处的标量:$(@ h1 {‘key2’})[1].为什么这是错的?这个变量引用的东西很混乱.
%h1 = { 'key1' => ( 1,6 ) };
您正在尝试将hashref({}构造)分配给哈希.它被字符串化为标量,并在%h1中用作键,值为undef.另外,因为你正在使用列表(()构造),它会变得扁平,你正在创建哈希:
%href = ( key1 => 1,2 => 3,key2 => 4,5 => 6,);
在后一种情况下,您使用数组引用([]构造)正确创建哈希,但您仍然在为哈希分配href.你想做:
%h1 = ( 'key1' => [ 1,6 ] );
这将通过引用在列表上下文中创建%h1,在标量上下文中创建值.