2010-07-27 12 views

risposta

12

Assolutamente. Il comando open con la modalità >&= consente di aprire filehandle su descrittori di file arbitrari.

# 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

Naturalmente, se si va in giro chiamando maniglie 'STDFOO' che tipo di svilisce l'intera faccenda "STD". :) – hobbs

+0

hobbs ha ragione, ma penso che mobrule stava cercando di indicare che STDOUT e STDERR sono solo sinonimi per l'output su fd1 e fd2, ma anche quello può essere modificato, non è troppo raro all'interno di un punto di script STDERR a un altro file per un file che è stato aperto per la scrittura. – mikegrb

+0

'> &' 'dup's (crea un nuovo descrittore di file) e crea un handle di file Perl dal nuovo descrittore di file. Dovresti usare '> & =' per creare un handle Perl per il descrittore di file esistente. Fisso. – ikegami

Problemi correlati