El problema es que Perl 'interpola' $1 pensando que es una variable suya, cuando en realidad sabemos que es una variable que se debe pasar al shell para que lo interprete awk.
Una solución es hacer que se ejecute el comando awk de una forma un poco 'artificiosa':
Using perl Syntax Highlighting
$x = '$1';
$Cadena = qx(ls
-l
/var
/ldap
| grep cert7
.db
| awk
'{ print $x}');Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
Pero la verdadera solución, como siempre, es escapar el símbolo conflictivo:
Using perl Syntax Highlighting
$Cadena = qx(ls
-l
/var
/ldap
| grep cert7
.db
| awk
'{ print \$1}');Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Pero... ¿para qué tanto jaleo si es mucho mejor hacerlo todo con el propio Perl?
Using perl Syntax Highlighting
$Cadena = (split " ", (grep { /cert7\.db/ } qx(ls
-l
))[0
])[0
];Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Te ahorras la ejecución de dos programas (grep y awk).
De hecho, este problema ya está resuelto en un
hilo anterior.
Hay que usar el sistema de búsqueda, javierg.