Ayuda con algo sencillo de PERL

Buenas. Tengo una duda.
En un script en Perl tengo la siguiente linea:

my &mail = ARGV[1];

El problema es que los correos electrónicos contiene el carácter especial '@' y la variable mail no coge el valor adecuado.
Por ejemplo si por la linea de comandos se ha entrado 'mail@dominio.com', coge 'mail.com'

Seguro que sabéis como arreglarlo.

Gracias de antemano.
prueba a sustituir "@" por "\@", si te va es que perl te hace una jugarreta al interpretar el caracter "@". Creo que tiene que ver algo con los simbolos de antes de las variable, prueba a jugar con ellos en la asignacion.
DS_impact escribió:Buenas. Tengo una duda.
En un script en Perl tengo la siguiente linea:

my &mail = ARGV[1];

El problema es que los correos electrónicos contiene el carácter especial '@' y la variable mail no coge el valor adecuado.
Por ejemplo si por la linea de comandos se ha entrado 'mail@dominio.com', coge 'mail.com'

Seguro que sabéis como arreglarlo.

Gracias de antemano.



El problema no va por donde crees. No importa el contenido de la variable para que interfiera con la nomenclatura de ésta. Eso sí, la shell puede que te expanda los argumentos, pero con la @ no es el caso.

Las variables escalares llevan un $, no un &. Para acceder a un elemento de una lista debes ponerle el $, porque se trata de un escalar.

Prueba en la shell:
perl -e 'my $mail = $ARGV[0]; print "\$mail = $mail\n"' [email]mail@dominio.com[/email]
$mail = [email]mail@dominio.com[/email]


Por cierto, es Perl (el lenguaje) o perl (el intérprete). Nunca PERL [rtfm]
Saludos.
Gracias por las respuestas.
Primero de todo aclarar que el hice un error de transcripción y efectivamente es $ y no &.
Haciendo la prueba que comenta Nibble :
perl -e 'my $mail = $ARGV[0]; print "\$mail = $mail\n"' mail@dominio.com
$mail = mail@dominio.com

funciona bien y me he dado cuenta que el problema no es al asignarle la variable sinó cuando mas adelante en el script hago lo siguiente (para sustituir la palabra EMAIL por el mail del usuario):
perl -W -p -i -e 's/EMAIL/correo_elec@dominio.com/g;' plantilla

Luego en la plantilla es donde queda mal modificado.
Poniendo '\' antes de la '@' como dice Elohe me lo hace bien:
perl -W -p -i -e 's/EMAIL/correo_elec\@dominio.com/g;' plantilla

Pero el problema es que esto no lo voy a entrar yo sinó que este valor será cogido desde un formulario web (php).
Se me ocurre realizar una partición manual del email para poder tratarlo adecuadamente.
No se si hay otra opción más fácil?

Muchas gracias
Saludos
Prueba a hacer la conversion de @ en \@ en el script en perl y si no por que no haces algo un tanto sucio: que el formulario en php sea el encargado de convertir @ en \@ ,o un scrip del lado usuario que modifique automaticamente la @ por \@ en la cadena a enviar.
Elohe escribió:Prueba a hacer la conversion de @ en \@ en el script en perl y si no por que no haces algo un tanto sucio: que el formulario en php sea el encargado de convertir @ en \@ ,o un scrip del lado usuario que modifique automaticamente la @ por \@ en la cadena a enviar.


He hecho lo primero que comentas y ya funciona.
my $mail_arroba = "$mail";
$mail_arroba =~ s/@/\\@/;
perl -W -p -i -e 's/EMAIL/correo_elec@dominio.com/g;' plantilla


Muchas gracias
5 respuestas