On Mon, Oct 27, 2008 at 01:15:58PM +0100, Javier wrote: > Hola lista, > > estoy escribiendo un programilla en perl muy simple. Coge desde STDIN > la entrada, que es un correo electrónico y muestra los campos que este > tiene. Luego, dentro del campo $body (siempre tiene un formato > específico algo: valor) necesito quedarme sólo con un campo. ¿Cómo > puedo lograrlo? > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > El programa: > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > my $mbox= \*STDIN; > my $mb = Mail::MboxParser->new($mbox); > for my $msg ($mb->get_messages) > { > my $to = $msg->header->{to}; > my $from = $msg->header->{from}; > my $subject = $msg->header->{subject} || '<No Subject:>', > my $body = $msg->body($msg->find_body,0); > my $body_str = $body->as_string || '<No message text>'; > print "From: $from\n", > "To: $to\n", > "Subject: $subject\n", > "Message Text: $body_str\n"; > } > > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > El mail de entrada: > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > Pages: 1 > Receiver: > Quality: 196 > ... > GroupID: 16 > CommID: c000000040 > > Processing time was 0:39. > > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > La idea es leer con el programa esta entrada y luego conseguir > quedarme en una variable con el valor "c000000040". Alguna idea de > cómo realizar ese "grep" en perl. Lo intenté, pero en perl no consigo > sacarlo.
Tal vez algo como lo que sigue te sirva: sub get_value { my $body = shift || return undef; my $re = shift || return undef; my $value = undef; if ($body) { @$value = grep { /$re/ } split(qr{\n}, $body); for my $val (@$value) { print "VALUE $val\n"; } } return $value } Para tu caso, debieras invocar &get_value de la siguiente manera: &get_value($body_str, "c000000040"); Saludos. -- Pablo Jiménez -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]