• Publicidad

Pasar variable Perl a Bash

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Pasar variable Perl a Bash

Notapor ohmega » 2012-11-14 17:48 @783

¿Qué tal? Buena tarde. Antes que nada: excelente foro. Ya me han resuelto varias dudas pero apenas me animé a inscribirme. Bueno, mi duda es la siguiente:

Tengo un script Perl. Dentro de él declaro variables que son algo así:

my $var=`comandobash`;
my $var2=`grep "$var" archivo`;

$var trae una cadena de texto extraída de un archivo. Ahora no entendía por qué $var2 no muestra lo que quiero. Cuando la imprimía noté que $var la interpreta bash y como no está definida en bash pues está declarada en Perl.

¿Cómo puedo pasar a $var para que se use como patrón de búsqueda de grep?

Gracias de antemano.
ohmega
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2012-11-14 17:31 @771

Publicidad

Re: Pasar variable Perl a Bash

Notapor explorer » 2012-11-14 18:58 @832

Bienvenida a los foros de Perl en Español, ohmega.

Yo veo que lo estás haciendo bien... a mí me funciona:

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. explorer@casa:~/Documentos/Desarrollo> perl -E '$var = "chr"; $var2 = qx(grep "$var" *.pl); say $var2'
  2. cliente.pl:print $sock chr(length($texto)+1+8+2-1);        # uno menos
  3. cliente.pl:print $sock chr $_ foreach ( 0xa0, 0x01, 0x01, 0x01, 0xa0, 0x01, 0x01, 0x14 );     # 8
  4. cliente.pl:print $sock chr 0x22, chr 0x03;                 # 2
  5. cliente.pl:#    print $sock chr($_);
  6.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Perl sí que hace interpolación de variables dentro de las comillas invertidas (o el operador qx(), que es lo mismo), así que cuando pones $var dentro de esas comillas, Perl la interpola a su valor real antes de pasar todo el comando al shell del sistema para que lo ejecute. El shell no recibe '$var', sino su valor.

¿Seguro que el resultado de comandobash es correcto? Pon print() entre medias para estar seguro de que le pasas a grep algo correcto.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print "[$var]\n";   # los corchetes son necesarios, para ver los espacios en blanco y avances de línea
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4




Es más... casi seguro que lo que quieres hacer se puede hacer totalmente en Perl, y no depender de comandos externos.
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: Pasar variable Perl a Bash

Notapor ohmega » 2012-11-15 17:09 @756

¡Gracias por responder!

Ahora imprimiendo como me dices print "[$var]\n"; me devuelve esto:

[192.168.100.217 ]

Trae un espacio en blanco. Por eso cuando lo uso como patrón de búsqueda no encuentra lo que quiero.

¡¡Muchas gracias!! Es algo que me estaba rompiendo la cabeza. Incluso recurrí a arreglos asociativos pero cuando usaba la variable para búsqueda no me traía la que quería por el mismo espacio en blanco.

Y lo solucioné de este modo:

$var2 =~ s/^\s*(.*?)\s*$/$1/;
my $var3 = `grep "$var2" /diccionario | cut -d= -f2`;


Gracias por la ayuda.
ohmega
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2012-11-14 17:31 @771

Re: Pasar variable Perl a Bash

Notapor explorer » 2012-11-15 18:52 @828

Si sabes que el espacio en blanco está siempre detrás, lo puedes dejar así:

$var2 =~ s/\s*$//;

Lo que haces es localizar los posibles (*) espacios en blanco (\s) que están al final de la cadena ($), y los sustituyes por... nada (o sea, se borran).
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: Pasar variable Perl a Bash

Notapor ohmega » 2012-11-22 14:12 @633

¡Muchas gracias! Si puedes, marca el tema como solucionado.
Gracias por todo.
ohmega
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2012-11-14 17:31 @771


Volver a Básico

¿Quién está conectado?

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