stdin
y stdout
sino también
de stderr
y que constituyen una alternativa a system
y qx
.
Entre estos se encuentra IPC::Run3. El módulo no forma
parte del núcleo de Perl y hay que descargarlo desde CPAN:
pp2@nereida:~/src/perl/pipesconnombre$ perl -MIPC::Run3 -wde 0 main::(pi_pipenamed_cas.pl:15): my ($nprocs, $nblocks); DB<1> run3(['ls', '-l']) # usa STDIN, STDOUT, STDERR total 36 -rwx------ 1 pp2 pp2 14058 2006-03-27 23:33 pi -rw------- 1 pp2 pp2 488 2006-03-27 23:33 pi.c -rwx------ 1 pp2 pp2 1902 2006-03-28 18:25 pi_pipe_con_nombre.pl -rwxr-x--- 1 pp2 pp2 6677 2007-03-10 09:19 pi_pipe_con_nombre.tar.gz -rwx------ 1 pp2 pp2 2589 2007-03-12 09:21 pi_pipenamed_cas.pl DB<2> open $err, '> errores.txt' # errores a $err DB<3> run3(['ls', '-l', 'chuchu'], undef, undef, $err) DB<4> !!cat errores.txt # Mostremos los contenidos del fichero ls: chuchu: No existe el fichero o el directorio DB<5> run3(['ls', '-l'], undef, \undef) # STDOUT a /dev/null DB<6> DB<6> run3(['ls', '-l', 'chuchu'], undef, undef, undef) ls: chuchu: No existe el fichero o el directorio DB<7> sub out { print "\n".scalar(@_)." args\n<<<<<<<<<<<<<<<<<\n@_\n>>>>>>>>>>>>>>>>>" } DB<8> run3(['ls', '-l', qw{bidirwithnamedpipes.pl errores.txt}], undef, \&out) 1 args <<<<<<<<<<<<<<<<< -rwxr-xr-x 1 pp2 pp2 1038 2009-03-11 17:31 bidirwithnamedpipes.pl >>>>>>>>>>>>>>>>> 1 args <<<<<<<<<<<<<<<<< -rw-r--r-- 1 pp2 pp2 69 2010-03-01 08:16 errores.txt >>>>>>>>>>>>>>>>>
run3 retorna TRUE
si el comando pudo ejecutarse.
En caso contrario provoca la muerte del programa.
Deja $?
con la información intacta para su consulta.
Casiano Rodríguez León