- Contesto.
- Le parentesi non hanno il ruolo che si pensa di avere nella creazione di un elenco.
Esempi:
$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).
In parole povere, nel contesto di lista l'operatore virgola separa gli elementi di una lista; in contesto scalare l'operatore virgola è la "virgola seriale" C, che valuta i suoi lati sinistro e destro e restituisce il valore del lato destro. Nel contesto scalare, le parentesi raggruppano le espressioni per sovrascrivere l'ordine delle operazioni e, nel contesto dell'elenco, le parentesi fanno ... la stessa identica cosa, davvero.La ragione per cui sono pertinenti nell'assegnare ad array è questo:
# 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);
quanto riguarda la tua domanda "è uno scalare o un elenco di un elemento", non è solo una questione significativa per chiedere di un'espressione in isolamento , a causa del contesto. Nel contesto dell'elenco, tutto è una lista; in contesto scalare, nulla è.
Testi di: perlop, perldata, Programming Perl.
Suppongo di essere principalmente preoccupato di assegnare accidentalmente un elenco di un elemento contenente un risultato anziché il risultato stesso a uno scalare. Ma se sto leggendo le risposte correttamente, questo è effettivamente impossibile, a meno che non faccia qualcosa come '$ x = @ {[1 + 1]};'. Sembra che assegnare un elenco a uno scalare sia diverso dall'assegnare un array a uno scalare. Cosa succede se assegni un elenco contenente un array a uno scalare? '$ x = (@list);' –
In un compito, il lato sinistro determina il contesto in cui verrà valutato il lato destro. Pertanto, quando si assegna una matrice a una variabile scalare, la matrice viene valutata in un contesto scalare. Un array valutato in contesto scalare restituisce il numero di elementi nell'array. Entrambi gli esempi nel tuo commento rientrano in quella categoria. Notare anche che qui stiamo parlando della valutazione di un array in contesto scalare. Non stiamo parlando di un elenco in un contesto scalare, perché non ci sono elenchi in un contesto scalare. – FMc
Immagino di aver sempre pensato che liste e array fossero sostanzialmente equivalenti e intercambiabili, ma non lo sono. –