Bienvenida a los foros de Perl en Español, ohmega.
Yo veo que lo estás haciendo bien... a mí me funciona:
Using bash Syntax Highlighting
explorer@casa:~/Documentos/Desarrollo> perl -E '$var = "chr"; $var2 = qx(grep "$var" *.pl); say $var2'
cliente.pl:print $sock chr(length($texto)+1+8+2-1); # uno menos
cliente.pl:print $sock chr $_ foreach ( 0xa0, 0x01, 0x01, 0x01, 0xa0, 0x01, 0x01, 0x14 ); # 8
cliente.pl:print $sock chr 0x22, chr 0x03; # 2
cliente.pl:# print $sock chr($_);
Coloreado en 0.004 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.
Using perl Syntax Highlighting
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.