($test) = (@test);
$test = @test;
Con una parentesi attorno alla variabile, accoda il primo elemento dell'array. Non riesco a trovare alcuna informazione su cosa fa la staffa intorno alla matrice.
($test) = (@test);
$test = @test;
Con una parentesi attorno alla variabile, accoda il primo elemento dell'array. Non riesco a trovare alcuna informazione su cosa fa la staffa intorno alla matrice.
($test) = (@test);
Questo assegna i valori all'interno di @test
ad un elenco di variabili che contiene solo $test
. Quindi $test
conterrà il primo elemento di @test
. Si chiama contesto lista. È anche possibile escludere la parentesi intorno a @test
.
my @test = ('a', 'b');
my ($test) = @test; # 'a'
Questo è anche molto comunemente utilizzato per assegnare i parametri delle funzioni alle variabili. Quanto segue assegnerà i primi tre argomenti alla funzione e ignorerà tutti gli altri argomenti che seguono.
sub foo {
my ($self, $foo, $bar) = @_;
# ...
}
È anche possibile saltare elementi nel mezzo. Questo è anche valido. Il valore bar
non verrà assegnato qui.
my @foo = qw(foo bar baz);
(my $foo, undef, my $baz) = @foo;
$test = @test;
Questo forze @test
in contesto scalare. Le matrici in contesto scalare restituiscono il numero di elementi, quindi $test
diventerà un numero intero.
my @test = ('a', 'b');
my $test = @test; # 2
Si può leggere di più su contesto in perldata.
È possibile aggiungere che non si tratta di un problema: molte espressioni Perl restituiscono risultati diversi a seconda sul fatto che siano nel contesto dell'elenco o meno. Per esempio. questo è il motivo per cui 'my $ match = $ var = ~/con (. *) text /' non ti darà il valore di '$ 1' in' $ match' considerando 'my ($ match) = $ var = ~/con (. *) testo/'volontà. – reinierpost
Vedere [Mini-Tutorial: Scalare vs Operatore di assegnazione elenco] (http://www.perlmonks.org/?node_id=790129) – ikegami