2016-05-31 11 views
6
($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.

+2

Vedere [Mini-Tutorial: Scalare vs Operatore di assegnazione elenco] (http://www.perlmonks.org/?node_id=790129) – ikegami

risposta

14
($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.

+4

È 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

Problemi correlati