2010-07-27 9 views

Respuesta

12

Absolutamente. El comando open con el modo >&= le permite abrir filehandles en descriptores de archivos arbitrarios.

# perl 4fd.pl > file1 2> file2 3> file3 4> file4 5< file5 

open STDFOO, '>&=3'; 
open STDBAR, '>&=4'; 
open STDBAZ, '<&=5'; # works for input handles, too 

print STDOUT "hello\n"; 
print STDERR "world\n"; 
print STDFOO "42\n"; 
print STDBAR <STDBAZ>; 

$ echo pppbbbttt > file5 
$ perl 4fd.pl >file1 2>file2 3>file3 4>file4 5<file5 
$ cat file1 
hello 
$ cat file3 
42 
$ cat file4 file2 
pppbbbttt 
world 
+5

Por supuesto, si vas por ahí llamando asas 'STDFOO' que tipo de abarata todo el asunto "std". :) – hobbs

+0

hobbs tiene razón, pero creo que mobrule estaba tratando de señalar que STDOUT y STDERR son solo sinónimos de salida en fd1 y fd2 listos para usar, pero incluso eso se puede cambiar, no es demasiado raro dentro de un punto de script STDERR a otro fd para un archivo que se ha abierto para escribir. – mikegrb

+0

'> &' 'dup's (crea un nuevo descriptor de archivo) y crea un identificador de archivo Perl desde el nuevo descriptor de archivo. Debería utilizar '> & =' para crear un identificador de Perl para el descriptor de archivo existente. Fijo. – ikegami

Cuestiones relacionadas