2010-04-27 14 views
9

Ho una serie di stringhe su cui vorrei utilizzare la funzione join. Tuttavia, vorrei aggiungere un prefisso a ciascuna stringa con la stessa stringa. Posso farlo in una riga anziché iterare prima attraverso l'array e modificare ogni valore prima di utilizzare join?Aggiunta di un prefisso quando si utilizza join in Perl

In realtà è un po 'più complicato. Il prefisso non fa parte del separatore di join. Se si utilizza un prefisso come "num-" su un array di (1,2,3,4,5), si otterrà questo risultato: num-1, num-2, num-3, num-4 , num-5

risposta

20

Questo codice:

my @tmp = qw(1 2 3 4 5); 
my $prefix = 'num-'; 
print join "\n", map { $prefix . $_ } @tmp; 

dà:

num-1 
num-2 
num-3 
num-4 
num-5 
+1

Stavo per pubblicare una risposta, ma la tua è la migliore, quindi ho corretto la tua formattazione. :) – Ether

+1

Cambiato per usare la forma di blocco meno confusionaria della mappa, spero non ti dispiaccia :) – rjh

+0

Ci scusiamo per il one-liner. Grazie per le modifiche. – racerror

3

Basta fare la parte del prefisso del join:

my @array = qw(a b c d); 
my $sep = ","; 
my $prefix = "PREFIX-"; 
my $str = $prefix . join("$sep$prefix", @array); 

si potrebbe anche usare carta per fare il prefisso di se si preferisce:

my $str = join($sep, map "$prefix$_", @array); 
+0

Perché stai memorizzando una singola stringa in un array? – cjm

+1

cjm: Perché ci sono errori nel codice? Comunque, risolto :-) – runrig

Problemi correlati