• Publicidad

Error al imprimir variable

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Error al imprimir variable

Notapor jimr1984 » 2017-06-06 18:14 @801

Saludos. Por favor, si pueden ayudarme.
No entiendo lo que está sucediendo.

Mi código es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. my $var = "[email protected]";
  4.  
  5.  
  6. print $var."\n";
  7.  
  8.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


resultado:

perl mail.pl

prueba.com

Por favor, si pueden corregirme. Muchas gracias.
jimr1984
Perlero nuevo
Perlero nuevo
 
Mensajes: 123
Registrado: 2012-11-25 07:11 @341

Publicidad

Re: Error al imprimir variable

Notapor explorer » 2017-06-06 19:06 @837

El problema es que Perl está viendo un carácter '@' dentro de unas comillas dobles, así que está realizando una interpolación de la variable que sigue, en este caso, sería @demo.

Si hubieras puesto 'use strict;' y 'use warnings;' en el programa, el propio Perl te avisaría de esto.

Hay dos soluciones: cambiar las comillas dobles por simples, o escapar el carácter de la arroba.

Más información, en tu propio ordenador con el comando perldoc perldata, y en la Web (traducido al español, en la sección Interpolación de arrays).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Error al imprimir variable

Notapor jimr1984 » 2017-06-06 23:05 @003

El problema de no usar comilla simples es que tengo un arreglo de N direcciones de correo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @arreglo = ("[email protected]","[email protected]", ...);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

y esto se lo quiero pasar al programa mail de Linux para enviar un correo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. foreach (@arreglo) {
  2.     system(sh enviarmail.sh  $_ );
  3. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

El programa para enviar correos es un bash que tiene una sola línea, por ejemplo, el cual acepta un argumento:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. #!/bin/bash
  2. echo "test" | mail -s "asunto"  $1
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4

¿Cómo podría resolver este problema, por favor?

Gracias.
jimr1984
Perlero nuevo
Perlero nuevo
 
Mensajes: 123
Registrado: 2012-11-25 07:11 @341

Re: Error al imprimir variable

Notapor explorer » 2017-06-09 18:47 @824

Te complicas demasiado. Con Perl puedes hacer eso sin tanto nivel de profundidad.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use v5.14;
  3. use utf8;
  4. use strict;
  5. use warnings;
  6. use autodie;
  7.  
  8. my @direcciones = qw(
  9.     demo@hol.com
  10.     otro@mas.com
  11. );
  12.  
  13. my $texto = <<'EOT';
  14.     En un lugar de la Mancha, de cuyo nombre no quiero acordarme, no ha mucho
  15.     tiempo que vivía un hidalgo de los de lanza en astillero, adarga antigua,
  16.     rocín flaco y galgo corredor. Una olla de algo más vaca que carnero, salpicón
  17.     las más noches, duelos y quebrantos los sábados, lentejas los viernes, algún
  18.     palomino de añadidura los domingos, consumían las tres partes de su hacienda.
  19.     El resto della concluían sayo de velarte, calzas de velludo para las fiestas
  20.     con sus pantuflos de lo mismo, los días de entre semana se honraba con su
  21.     vellori de lo más fino. Tenía en su casa una ama que pasaba de los cuarenta, y
  22.     una sobrina que no llegaba a los veinte, y un mozo de campo y plaza, que así
  23.     ensillaba el rocín como tomaba la podadera. Frisaba la edad de nuestro hidalgo
  24.     con los cincuenta años, era de complexión recia, seco de carnes, enjuto de
  25.     rostro; gran madrugador y amigo de la caza. Quieren decir que tenía el
  26.     sobrenombre de Quijada o Quesada (que en esto hay alguna diferencia en los
  27.     autores que deste caso escriben), aunque por conjeturas verosímiles se deja
  28.     entender que se llama Quijana; pero esto importa poco a nuestro cuento; basta
  29.     que en la narración dél no se salga un punto de la verdad.
  30. EOT
  31.  
  32. for my $direccion (@direcciones) {
  33.  
  34.     open my $MAIL, "|-", qq(mail -s "asunto" $direccion);
  35.     print   $MAIL $texto;
  36.     close   $MAIL;
  37. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Incluso hasta te puedes ahorrar llamar al comando mail, con lo que no tienes el problema de tenerlo instalado o no:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use Email::MIME;
  3. use Email::Sender::Simple qw(sendmail);
  4. use Email::Sender::Transport::SMTP qw();
  5. use Try::Tiny;
  6. use utf8;
  7.  
  8. my $correo = Email::MIME->create(
  9.                 attributes => {
  10.                     content_type => 'multipart/alternative',
  11.                 },
  12.                 header_str => [
  13.                     From    => '[email protected]',
  14.                     To      => '[email protected]',
  15.                     Subject => 'Asunto: pruebas',
  16.                 ],
  17.                 parts => [
  18.                     Email::MIME->create(
  19.                         attributes => {
  20.                             content_type => 'text/plain' ,
  21.                             # encoding     => 'quoted-printable',
  22.                             charset      => 'utf-8',
  23.                         },
  24.                         body => "Este es el cuerpo. áéíóúñÁÉÍÓÚÑ",
  25.                     ),
  26.                     Email::MIME->create(
  27.                         attributes => {
  28.                             content_type => 'text/html'
  29.                         },
  30.                         body => '<h1>Test</h1>',
  31.                     )
  32.                 ],
  33. );
  34.  
  35. try {
  36.     sendmail(
  37.         $correo,
  38.         {
  39.             transport => Email::Sender::Transport::SMTP->new(
  40.                             host     => 'correo.mi.servidor.es',
  41.                             helo     => 'explorer.ddns.vodafone.es',
  42.                             port     => 25,
  43.                             username => 'usuario',
  44.                             password => 'contraseña',
  45.                             debug    => 1,
  46.             )
  47.         }
  48.     );
  49. }
  50. catch {
  51.     print "Error enviando datos: $_";
  52. };
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


P.D.: estamos en el foro Intermedio ;)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 3 invitados