2016-05-12 11 views
5

Non ho usato Perl da anni ma ho a che fare con un vecchio codice.Passa stringa e matrice temporanea in sub in 1 riga?

ho fatto una subroutine che voglio passare una stringa e un array in:

sub pass_in { 
    my ($str, $array) = @_; 
    for my $e (@$array) { 
     print "I see str $str and list elem: $e\n"; 
    } 
    return 0; 
} 

my @temp_arr = qw(A B C D E); 
my $str = "hello"; 
pass_in($str, \@temp_arr); 

Questo funziona bene. Ma invece non voglio creare un temp_arr. E 'in qualche modo possibile di fare:

non funziona:

pass_in($str, qw(A B C D E)); 

Inoltre, non funziona:

pass_in($str, \qw(A B C D E)); 

Quindi non c'è bisogno di creare una variabile temporanea?

risposta

6

È possibile utilizzare le parentesi quadre per creare un riferimento ad un array:

pass_in($str, [qw(A B C D E)]); 

perldoc perlref

+1

Grazie mille !! questo ha fatto il trucco! –

+0

Oppure puoi assegnare 'my ($ str, @array) = @ _' e passare l'elenco di elementi' pass_in ($ str, qw (A B C D E)); ' – Sobrique

1

per trascorrere una in array, si dispone di una matrice deve passare!

qw() non crea una matrice. Mette solo un mucchio di scalari in pila. Quello per cui stai cercando è [ ]. Crea convenientemente un array, inizializza l'array usando l'espressione all'interno e restituisce un riferimento all'array.

pass_in($str, [qw(A B C D E)]); 

In alternativa, è possibile riscrivere la subroutine per accettare un elenco di valori.

sub pass_in { 
    my $str = shift; 
    for my $e (@_) { 
     print "I see str $str and list elem: $e\n"; 
    } 

    return 0; 
} 

pass_in("hello", qw(A B C D E)); 
Problemi correlati