Здравствуйте, я изучаю perl и опубликую здесь несколько предположений. Поэтому, пожалуйста, не стесняйтесь комментировать и исправлять меня, если я где-то ошибаюсь.
Создание хэша выполняется (среди нескольких других способов):
%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" ] );
Если бы у меня были «неанонимные» хэши, содержащие каждого члена семьи (флинстоуны, джетсоны, симпсоны), какую конструкцию я должен использовать для создания
%HOH
?$HOH{flinstones} = {%flinstones};
or
$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 }