Przypisanie lista w kontekście skalarnym zwraca liczbę elementów na prawej stronie:Lista Obsadzenie w kontekście skalarnym
scalar(my ($hello, $there, $world) = (7,8)); #evaluates to 2
Dlaczego ocenić prawą stronę i produkować 2 zamiast nowo zdefiniowanej listy oceniając i zwracając 3?
Dla mnie wydaje się $hello
dostaje 7, $there
dostaje 8, a $world
dostaje undef
, to lista jest oceniana w kontekście skalarnym, co doprowadziłoby do 3, jako że jest to liczba elementów na liście ($hello $there $world
). Wydaje się dziwne mi się, że kontekst wpływa która jest zwracana część ocenianego wypowiedzi:
my $greeting = (($hello, $there, $world) = (7,8)); #2
my @greeting = (($hello, $there, $world) = (7,8));
my $greeting_length = @greeting; #3
Rzeczywiście, nie: Jeśli lista po lewej stronie była rzeczą ocenianą w kontekście skalarnym, wartość byłaby "undef". Lista nie jest tablicą. – darch
@darch, To nie ma sensu. '($ hello, $ there, $ world)' (i '(7,8)') nie może być wykonane w kontekście skalarnym w '($ hello, $ there, $ world) = (7,8)'. Przypisanie listy może zwrócić 3, jeśli chce, ale nie ma powodu do tego. – ikegami
Odpowiadałem właśnie na wyrażenie "wtedy [lista (cześć, tam $, świat $)] jest oceniana w kontekście skalarnym". Oceń 'my ($ h, $ t, $ w) = (7, 8, undef); skalar ($ h, $ t, $ w) 'i zobacz, że listy nie są tablicami. – darch