В обоих случаях присваивание $ r вызывает скалярный контекст в do. Однако в первом случае скалярный контекст в списке возвращает последнее значение списка, «44».
Во втором случае присваивание my ($x)
вызывает контекст списка. Результатом присваивания списку в скалярном контексте является количество элементов в правой части присвоения. Итак, вы получите.
map $_, 44
возвращает список длины 1, содержащий (44)
my ($x) =
присваивает приведенные выше результаты в контексте списка из-за скобок вокруг $x
списку ($x)
, составляющему $ x = 44
Блок do
находится в скалярном контексте из-за присваивания $r
, обратите внимание на отсутствие скобок, и, как я уже говорил выше, это возвращает длину правой части назначения списка. 1 в этом случае.
Посмотрите, что произойдет, если вы сделаете это:
perl -wE 'say my $r = () = (1,3,5,7)'