un'assegnazione di lista in un contesto scalare restituisce il numero di elementi sul lato destro:lista di attribuzione scalare contesto
scalar(my ($hello, $there, $world) = (7,8)); #evaluates to 2
Perché si valuta il lato destro e produrre 2, al posto della lista appena definito essere valutato e restituito 3?
A me, sembra che $hello
ottiene 7, $there
ottiene 8, e $world
ottiene undef
, quindi tale elenco viene valutata in un contesto scalare, il che porterebbe a 3, dato che questo è il numero di elementi nella lista ($hello $there $world
). Sembra strano per me quel contesto colpisce che viene restituita parte dell'espressione valutata:
my $greeting = (($hello, $there, $world) = (7,8)); #2
my @greeting = (($hello, $there, $world) = (7,8));
my $greeting_length = @greeting; #3
Infatti, no: se la lista di sinistra era la cosa valutata in contesto scalare, il valore sarebbe 'undef'. Una lista non è una matrice. – darch
@darch, che non ha senso. '($ hello, $ there, $ world)' (e '(7,8)') non può essere eseguito in un contesto scalare in '($ ciao, $ là, $ mondo) = (7,8)'. L'assegnazione dell'elenco potrebbe restituire 3 se lo desidera, ma non c'è motivo di farlo. – ikegami
Stavo rispondendo esattamente alla frase "allora [la lista ($ ciao, $ là, $ mondo)] è valutata in contesto scalare". Valuta 'my ($ h, $ t, $ w) = (7, 8, undef); scalare ($ h, $ t, $ w) 'e vedere che gli elenchi non sono matrici. – darch