Мышление о следующем. Есть список
qw(a b c);
теперь присвоить LIST в безымянный (анонимный) ARRAY
[ qw(a b c) ]
поэтому следующего
use 5.016;
use warnings;
use diagnostics;
my $x = [ qw(a b c) ];
say ref $x; #ARRAY - the $x is an ARRAY reference, and
say $x->[1]; #prints "b", and
say [ qw(a b c) ]->[1]; #works too
но то, что происходит сейчас?
use 5.016;
use warnings 'all';
use diagnostics;
say ${[ qw(a b c) ]}[1];
печатает b
, но
my $y = ${[ qw(a b c) ]};
ошибка,
Not a SCALAR reference at pepe line 6 (#1)
(F) Perl was trying to evaluate a reference to a scalar value, but found
a reference to something else instead. You can use the ref() function
to find out what kind of ref it really was. See perlref.
Uncaught exception from user code:
Not a SCALAR reference at pepe line 17.
Так, Что означает Contruction $ {....}
- It «работает» в
say
(печатает второй элемент т анонимного массива), но не понимаю, почему - , но не может назначить его в переменную
И намек на diagnostics
не очень полезно, потому что, как я должен использовать ref
, когда я не может назначить? Что я пропустил от perlref
?
Обновлено ответа. – ikegami
'$ {BLOCK} [EXPR]' – ysth
@ysth, да, хотя вы имеете в виду '$ BLOCK [EXPR]'. Я настроюсь (используя что-то немного менее запутанное). – ikegami