Una asignación de la lista en contexto escalar devuelve el número de elementos en el lado derecho:Lista de asignación de escalar Contexto
scalar(my ($hello, $there, $world) = (7,8)); #evaluates to 2
¿Por qué evaluar el lado derecho y producen 2, en lugar de la lista que acaba de definir siendo evaluado y devolviendo 3?
Para mí, parece que $hello
obtiene 7, $there
obtiene 8 y $world
obtiene undef
, entonces esa lista se evalúa en contexto escalar, lo que resultaría en 3, ya que es el número de elementos en la lista ($hello $there $world
) Parece extraño para mí que el contexto afecta el que se devuelve parte de la expresión evaluada:
my $greeting = (($hello, $there, $world) = (7,8)); #2
my @greeting = (($hello, $there, $world) = (7,8));
my $greeting_length = @greeting; #3
De hecho, no: si la lista de la izquierda era la cosa evaluada en contexto escalar, el valor sería 'undef'. Una lista no es una matriz. – darch
@darch, Eso no tiene sentido. '($ hello, $ there, $ world)' (y '(7,8)') no se pueden ejecutar en contexto escalar en '($ hello, $ there, $ world) = (7,8)'. La asignación de la lista podría devolver 3 si quisiera, pero no hay razón para hacerlo. – ikegami
Respondí con precisión a la frase "entonces [la lista ($ hola, $ allí, $ mundo)] se evalúa en contexto escalar". Evalúa 'my ($ h, $ t, $ w) = (7, 8, undef); escalar ($ h, $ t, $ w) 'y ver que las listas no son matrices. – darch