Что должен сделать следующий код Perl?
$logline{$cod}{s1} = scalar keys %{$valid{$cod}};
"valid" следует рассматривать как hashref, а $ cod следует рассматривать как ключ. Это правильно?
Что означает «s1» в левой руке, ключ снова?
Что должен сделать следующий код Perl?
$logline{$cod}{s1} = scalar keys %{$valid{$cod}};
"valid" следует рассматривать как hashref, а $ cod следует рассматривать как ключ. Это правильно?
Что означает «s1» в левой руке, ключ снова?
Получить значение %valid
проиндексированы $cod
.
$valid{$cod}
Рассматривайте это значение, как если бы оно было hashref.
%{$valid{$cod}}
Получить список ключей этого hashref.
keys %{$valid{$cod}}
Узнайте, сколько ключей находится в этом списке.
scalar keys %{$valid{$cod}}
(Это не так, как на самом деле работает, а keys
вызывается в скалярном контексте возвращает число, представляющее количество элементов, он вернулся бы, если бы был в контексте списка.)
Хеш %logline
индексируется $cod
.
$logline{$cod}
Что само по себе является hashref, который индексируется s1
.
$logline{$cod}{s1}
Значение первого сегмента сохраняется в положении, указанном втором
$logline{$cod}{s1} = scalar keys %{$valid{$cod}};
@ikegami Я не мог придумать способ поставить его, не написав его иначе, чем оригинал. Или писать то, что было трудно писать, не говоря уже о том, чтобы читать. Возможно, я должен просто разбить его больше, даже если его придется писать по-другому. –
Можете ли вы использовать 'scalar' в списке? В perldoc говорится, что при использовании в списке в скобках он возвращает только последний элемент. На массиве, да, но не в списке. – TLP
Я указывал, какие «ключи» полезны в контексте списка, а также в скалярном контексте. –
Сохраняет количество элементов в hashref, на которое ссылается $ valid {$ cod} в LHS.
"valid" should be treated as a hashref,
Нет, «действительно» есть имя% действительного хэша и $ действительным {} обращается к одному из значений в хэш.
$ cod - это хэш-ключ в обоих местах. «s1» также является хэш-ключом.
Так что $ logline {$ cod} снова hashref, а s1 - ключ для этого хэша второго уровня? Правильно ли я понимаю? – user1109094
@ user1109094 Правильно –
@ user1109094, 's1' - это годовое слово, которое создает строку' s1', и да, оно используется как ключ для хэша, на который ссылается '$ logline {$ cod}'. – ikegami
по пути, то 'scalar' совершенно излишним , Выражение уже находится в скалярном контексте. – ikegami
Пожалуйста, прочитайте [perldoc perldata] (http://perldoc.perl.org/perldata.html) и [perldoc perlref] (http://perldoc.perl.org/perlref.html), и все будет намного яснее. – Ether