你好,我正在学习Perl,我会在这里发表几个假设。所以请随时评论和纠正我,如果我在某个地方错了。Perl - 匿名hashmaps和数组 - 几个问题
创建哈希完成(几另一个方法中)由:
%numbers = qw(one 1 two 2);
创建阵列完成由以下几点:
@array = qw(one two);
上述结构表示 “非匿名” 的类型。非匿名类型和匿名类型之间的主要区别在于名称类型有一个我可以参考的名称。如果我想创建匿名类型,我需要在数组中更改方括号
[]
的括号()
,或者在散列中更改大括号{}
。换句话说散列哈希是对其他哈希的引用的散列。因此我需要在嵌套散列中使用{}
而不是经典散列()
。%HoH = ( flintstones => { husband => "fred", pal => "barney", }, jetsons => { husband => "george", wife => "jane", "his boy" => "elroy", # quotes needed on key. }, simpsons => { husband => "homer", wife => "marge", kid => "bart", }, );
同样的情况适用于多维数组。多维数组是一个包含对另一个数组引用的数组,因此需要使用[]来代替()。
@array_of_arrays = ([ "one", "two", "three" ], [ 4, 5, 6, 7 ], [ "alpha", "beta" ] );
如果我必须包含每个家庭成员的“无名氏”散列(flinstones,摩登家庭,辛普森)我应该使用哪种建设创建
%HOH
?$HOH{flinstones} = {%flinstones};
或
$HOH{flinstones} = \%flinstones;
我假设
\%flinstones
无非是$HOH{flinstones}
分配基准,这意味着,无论我做什么,以%flinstones
将影响$HOH{flinstones}
因为它只包含它的参考。另一方面,{%flinstones}
就像是将“非匿名”哈希重新转换为“匿名”哈希。这会影响%flinstones
以后可以修改或甚至删除,并且不会影响$HOH{flinstones}
,因为存在对匿名散列的引用。变量在循环中会发生什么?当循环内部发出
my $variable;
它覆盖旧的或创建新的,或者它是相同的变量,或者这里发生了什么?for($i=0;$i<4;$i++){ my $variable=$i; print $variable }
您应该只对每个问题提出一个问题。 – TLP 2013-03-12 15:00:19