Perl no hace una interpolación de los
hash, si están entrecomillados:
Using bash Syntax Highlighting
$ perl -E '%h = ( a => 1, b => 2, c => 3 ) ; say "%h"'
%h
Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
En cambio, si lo mandamos de forma directa, sí que salen los valores del
hash:
Using bash Syntax Highlighting
$ perl -E '%h = ( a => 1, b => 2, c => 3 ) ; say %h'
c3a1b2
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Así que esa la forma que debes usar para comprobar si recibes bien el
hash:
Using perl Syntax Highlighting
print "$var1, $var2, ", %hash, "\n";
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Otra forma, quizás un poco enrevesada, pero que se utiliza mucho por los expertos, es la de forzar la interpolación dentro de las comillas dobles. Eso se consigue si transformamos la expresión en algo que se parezca a un
array o lista de elementos.
Esta es una de esas cosas medio escondidas que tiene Perl. Bueno, en realidad, no está escondida:
perldoc -f scalar:
scalar EXPR
Fuerza EXPR a ser interpretada en contexto escalar y devuelve el valor de EXPR.
@contadores = ( scalar @a, scalar @b, scalar @c );
No hay un operador equivalente que fuerce a una expresión a ser interpolada en contexto de lista, ya que en la práctica, esto nunca es necesario. Sin embargo, si realmente
quiere hacer eso, puede usar la construcción "@{[ (una expresión) ]}", pero por lo general un simple "(una expresión)" basta.
...
Así que eso es lo que hacemos:
Using bash Syntax Highlighting
> perl -E '%h = ( a => 1, b => 2, c => 3 ) ; say "@{[ %h ]}"'
c 3 a 1 b 2
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
y ya sale bonito (a costa de poner en una sentencia un montón de caracteres especiales
)
Una posible versión (comprobada):
Using perl Syntax Highlighting
#!/usr/bin/perl
my %hash = ( a => 1, b => 2, c => 3 );
my $arg1 = 234;
my $arg2 = 43;
system('/usr/bin/perl', 'programa2.pl', $arg1, $arg2, %hash);
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Using perl Syntax Highlighting
#!/usr/bin/env perl
my ($var1, $var2, %hash) = @ARGV;
print "$var1, $var2, @{[ %hash ]}\n";
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Using text Syntax Highlighting
> perl programa1.pl
234, 43, c 3 a 1 b 2
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4