Il codice che ho scritto è la seguente:Perché l'elenco la mia mappa Perl restituisce solo 1?
#!/usr/bin/perl
my @input = ("a.txt" , "b.txt" , "c.txt") ;
my @output = map { $_ =~ s/\..*$// } @input ;
print @output ;
La mia intenzione è quella di lasciare che il nome del file senza l'estensione memorizzata nella matrice @output
. ma invece memorizza il valore restituito dal s///
piuttosto che il nome del file modificato in @output
, quindi il risultato sembra
1
1
1
quindi qual è il modo corretto di utilizzare map
nell'ambito di questa situazione?
@derobert: quello mancante è un errore di modifica, l'ho risolto.e ho testato la tua soluzione e funziona! –
Felice di sentirlo funzionare. – derobert
Elenco :: MoreUtils http://search.cpan.org/perldoc/List::MoreUtils offre 'apply' che è perfetto per questo genere di cose. Funziona come una 'mappa', ma non altera i valori nell'argomento dell'array. 'usa List :: MoreUtils 'apply'; my @output = apply {s /\..*$//} @input; ' – daotoad