2010-04-27 33 views
9

Tengo una matriz de cadenas en las que me gustaría utilizar la función de unión. Sin embargo, me gustaría prefijar cada cadena con la misma cadena. ¿Puedo hacer esto en una línea en lugar de iterar a través de la matriz primero y cambiar cada valor antes de usar join?Agregar un prefijo al usar join en Perl

En realidad es un poco más complicado. El prefijo no es parte del separador de unión. Es decir, si utilizó un prefijo como "num-" en una matriz de (1,2,3,4,5), querrá obtener este resultado: num-1, num-2, num-3, num-4 , núm-5

Respuesta

20

este código:

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

da:

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

Iba a publicar una respuesta, pero la tuya es la mejor, así que en su lugar he arreglado tu formateo. :) – Ether

+1

Lo cambié para usar la forma de mapa de bloque menos confusa, espero que no te moleste :) – rjh

+0

Disculpa por el one-liner. Gracias por las ediciones. – racerror

3

Simplemente haga la parte prefijo de la unión:

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

también puede utilizar el mapa para hacer la fijación previa, si lo prefiere:

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

¿Por qué está almacenando una sola cuerda en una matriz? – cjm

+1

cjm: ¿Por qué hay errores en el código? De todos modos, corregido :-) – runrig

Cuestiones relacionadas