[bcn-pm] Problemas con split.

Miquel Ruiz self a miquelruiz.net
dll feb 18 02:05:12 PST 2013


El 18/02/2013 10:24, Manuel Trujillo (TooManySecrets) escribió:
> Holas!
>
> Hacía mucho tiempo que no hacía nada con Perl, y lo estoy pagando con
> creces...
>
> Tengo un script que ejecuta directamente de sistema una orden para el
> oracle-asm. De ahí extraigo ésto:
>
> NAME           512   4,096    1,048,576 CONNECTED   EXTERN
> 139,384         34,572     24.80
>
> Lo que necesito es trabajar con los tres últimos números. Para ello he
> probado lo siguiente:
>
> @TOTAL = split(/\s+/,system("comandos_oracle"));
> print $total[6];
>
> No funciona; me dá el bonito mensaje conforme no sabe nada de la
> variable $total:
> "Use of uninitialized value in print at testasm.pl <http://testasm.pl>
> line..."
>
> Si digo de hacer el split así:
> @TOTAL = split(/ /,system....);
> Pasa exactamente lo mismo (hay un espacio entre / y /).
>
> También he probado pasando el contenido a $TOTAL, y ejecutando luego el
> split y asignación:
>
> $TOTAL = system("comandos_oracle");
> @TOTAL = split(/\s+/, $TOTAL); #el split probado con \s y /<espacio>/
>
> Pero el resultado es exactamente el mismo... sigh...
>
> Seguro que es una tontería que tengo delante (o no), pero, ¿alguien
> podría echarme un cable por favor?
>
> Por cierto, he probado un foreach sobre @TOTAL, para ver qué hay en cada
> posición, y por lo que veo, sencillamente parece que el split *no* se
> hace (o eso me parece a mí).
>

Buenas!

La llamada "system" no retorna el output del comando, sinó su "exit code".

Para capturar el output lo tendrás que ejecutar con backticks:

@TOTAL = split(/\s+/, `comandos_oracle`));

Salut!

-- 
Miquel Ruiz


Més informació sobre la llista de correu Barcelona-pm