- Contexto.
- Los paréntesis no tienen la función que usted cree que tienen al crear una lista.
Ejemplos:
$x = 1 + 1; # $x is 2.
$x = (1 + 1); # $x is 2.
@x = 1 + 1; # @x is (2).
@x = (1 + 1); # @x is (2).
$x = (1 + 1, 1 + 2); # $x is 3.
@x = (1 + 1, 1 + 2); # @x is (2, 3).
En términos generales, en el contexto de lista el operador de coma separa los elementos de una lista; en contexto escalar, el operador de coma es la "coma en serie" C, que evalúa sus lados izquierdo y derecho, y devuelve el valor del lado derecho. En el contexto escalar, los paréntesis agrupan las expresiones para anular el orden de las operaciones, y en el contexto de la lista, los paréntesis hacen ... exactamente lo mismo, realmente.La razón por la que son relevantes en la asignación de matrices es la siguiente:
# Comma has precedence below assignment.
# @a is assigned (1), 2 and 3 are discarded.
@a = 1, 2, 3;
# @a is (1, 2, 3).
@a = (1, 2, 3);
cuanto a su pregunta "¿es un escalar o una lista de un solo elemento", no es sólo una cuestión significativa para pedir de una expresión en forma aislada por el contexto En el contexto de la lista, todo es una lista; en contexto escalar, nada es.
Lectura recomendada: perlop, perldata, Programación Perl.
Supongo que me preocupa sobre todo la asignación accidental de una lista de un elemento que contiene un resultado en lugar del resultado a un escalar. Pero si estoy leyendo las respuestas correctamente, esto es realmente imposible, a menos que haga algo como '$ x = @ {[1 + 1]};'. Parece que asignar una lista a un escalar es diferente de asignar una matriz a un escalar. ¿Qué sucede si asigna una lista que contiene una matriz a un escalar? '$ x = (@list);' –
En una asignación, el lado izquierdo determina el contexto en el que se evaluará el lado derecho. Por lo tanto, cuando asigna una matriz a una variable escalar, la matriz se evalúa en contexto escalar. Una matriz evaluada en contexto escalar devuelve la cantidad de elementos en la matriz. Ambos ejemplos en su comentario caen bajo esa categoría. También observe que aquí estamos hablando de la evaluación de una matriz en contexto escalar. No estamos hablando de una lista en contexto escalar, porque no hay listas en contexto escalar. – FMc
Supongo que siempre he pensado que las listas y las matrices son básicamente equivalentes e intercambiables, pero no lo son. –