lo más sencillo es que uses expresiones regulares, dado tu fichero de entrada 
podrías ejecutar el comando:

$ perl -e "$_=<stdin>; /^CommID: (.*)/; print $1;" < fichero

En tu código, para quedarte con el valor de la variable que mencionas te 
llegaría añadir lo siguiente:

$valor=$body; $valor =~ s/^CommID: (.*)/\1/;

y tendrías en $valor el valor de la variable que deseas.

> Date: Mon, 27 Oct 2008 09:42:01 -0300
> From: [EMAIL PROTECTED]
> To: [email protected]
> Subject: Re: Grep en perl
> 
> El día 27/10/08, Javier <[EMAIL PROTECTED]> escribió:
> > 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.
> >
> aquí tenés un ejemplo de uso de grep:
> http://perl.about.com/od/perltutorials/qt/perlgrep.htm
> 
> y /parece/ que tus datos tienen que estar en un array. Yo (no tengo un
> perl a mano, así que lo mas seguro es que lo siguiente no funcione) lo
> haría con algo como
> 
> if ($cadena=~ /CommID/ ) { ($campo,$valor)=split(':', $cadena) }
> 
> o algo así, mas información:
> http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#op_=~
> http://perlenespanol.baboonsoftware.com/tutoriales/funciones/funcion_split_y_join.html
Confiabilidad:Fiabilidad vendedor:Privacidad:Seguridad infantil:
_________________________________________________________________
Explore the seven wonders of the world
http://search.msn.com/results.aspx?q=7+wonders+world&mkt=en-US&form=QBRE

Responder a