imprimir arreglos arreglo arrays perl

arrays - imprimir - arreglos en perl



Formas de aplanar una matriz de Perl en contexto escalar (5)

Recientemente comencé a aprender perl y tengo una pregunta a la que no encuentro una respuesta clara en Internet. di que tengo algo como esto,

@arr = (1, 2, 3); $scal = "@arr" # $scal is now 123.

¿Es el uso de comillas la única forma de aplanar la matriz para que cada elemento se almacene en el valor escalar? Parece improbable, pero no he encontrado ninguna otra forma de hacerlo. Gracias por adelantado.


En el espíritu de TIMTOWTDI:

my $scal; $scal .= $_ foreach @arr;


En su ejemplo, está interpolando una matriz en una cadena entre comillas dobles. Lo que sucede en esas circunstancias es controlado por la variable $" Perl. Desde perldoc perlvar :

$ LIST_SEPARATOR

PS

Cuando una matriz o un segmento de matriz se interpola en una cadena entre comillas dobles o un contexto similar como /.../, sus elementos están separados por este valor. Por defecto es un espacio. Por ejemplo, esto:

print "The array is: @array/n";

es equivalente a esto:

print "The array is: " . join($", @array) . "/n";

Mnemónico: funciona en contexto de doble cita.

El valor predeterminado para $" es un espacio. Obviamente, puede cambiar el valor de $" .

{ local $" = '':'', my @arr = (1, 2, 3); my $scalar = "@arr"; # $scalar contains ''1:2:3'' }

Al igual que con cualquiera de las variables especiales de Perl, siempre es mejor localizar cualquier cambio dentro de un bloque de código.


La función de join se usa comúnmente para "aplanar" las listas. Le permite especificar lo que desea entre cada elemento en la cadena resultante.

$scal = join(",", @arr); # $scal is no "1,2,3"


Leer sección Contexto en perldata . Perl tiene dos contextos principales: escalar y lista.

Por ejemplo:

@a = (1, 1, 1); # list context print @a; # list context $count = @a; # scalar context, returns the number of elements in @a

etc.


También puedes usar join sin ningún separador.

my $scalar = join( '''' , @array ) ;

Hay más de una forma de hacerlo.