您好我正在学习 perl,我将在这里发布几个假设。因此,如果我在某处错了,请随时评论和纠正我。
通过以下方式创建哈希(在其他几种方式中):
%numbers = qw(one 1 two 2);
创建数组通过以下方式完成:
@array = qw(one two);
以上结构代表“非匿名”类型。非匿名类型和匿名类型之间的主要区别在于命名类型有一个我可以参考的名称。如果我想创建匿名类型,我需要更改数组中方
()
括号[]
或{}
散列中大括号的括号。换句话说,散列的散列是对其他散列的引用的散列。因此我需要{}
在嵌套 hash 而不是经典 hash中使用()
。%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、jetsons、simpsons)的“非匿名”哈希,我应该使用哪个结构来创建
%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 }