Hmm, interesante cómo diferentes personas están respondiendo de esta manera diferente. Me parece que mk y Daniel Fone lo interpretaron como queriendo ver/manipular el stdout del comando (ninguna de sus soluciones captura stderr fwiw). Creo que se acercó Rudd. Una vuelta de tuerca que podrías hacer en la respuesta de Rudd es sobreescribir el comando incorporado en el sistema() con tu propia versión para que no tengas que volver a escribir el código existente para usar su comando execute().
usando su ejecución() Sub En el post de Rudd, que podría tener algo como esto en la parte superior de su código:
if ($DEBUG) {
*{"CORE::GLOBAL::system"} = \&{"main::execute"};
}
creo que va a funcionar, pero tengo que admitir que este es el vudú y que ha sido un tiempo desde que escribí este código. Aquí está el código que escribí hace años para interceptar las llamadas al sistema en un (espacio de nombres llamando) local o nivel mundial en el tiempo de carga del módulo:
# importing into either the calling or global namespace _must_ be
# done from import(). Doing it elsewhere will not have desired results.
delete($opts{handle_system});
if ($do_system) {
if ($do_system eq 'local') {
*{"$callpkg\::system"} = \&{"$_package\::system"};
} else {
*{"CORE::GLOBAL::system"} = \&{"$_package\::system"};
}
}
El gran problema de sustituir el comando global '' system' es que system' tiene un prototipo complejo que no puede ser replicado por el sistema prototipo especificado por el usuario. Como resultado, algunos códigos simplemente no funcionarán si reemplaza 'system' con su versión personalizada. – cjm