La differenza è che si sta scrivendo a due distinti e (da Perl e di punto di vista del programma) handle di file indipendenti.
Il primo è un handle di file aperto ad uno speciale file "periferica" a Unixy sistema operativo che è "sinonimo di terminale di controllo di un processo, eventuali" (citazione da this Linux document). Si noti che sebbene sia comunemente considerato come "schermo", non deve essere (ad esempio, quel terminale potrebbe essere collegato al file di dispositivo di una porta seriale); e potrebbe non esistere o non essere apribile.
Il secondo è un file gestito per impostazione predefinita con descrittore di file n. 1 per il processo.
Possono sembrano essere identici a prima vista a causa del fatto che, in una situazione tipica, una shell Unix per default associare il suo descrittore di file # 1 (e quindi uno di ogni processo si lancia senza redirect) con /dev/tty
.
I due non hanno nulla in comune dal punto di vista Perl, A parte il fatto che questi due generalmente finiscono associati per impostazione predefinita a causa del modo in cui funzionano le shell Unix.
Il comportamento funzionale dei due pezzi citati di codice spesso SEMBRA identico a causa di questo valore predefinito, ma è solo "per caso".
Tra differenze pratiche:
/dev/tty
non esiste necessariamente non Unixy sistemi operativi. Pertanto è altamente non portatile utilizzare tty. L'equivalente di Windows è CON:
IIRC.
STDOUT
di un programma può essere associato (reindirizzato) a QUALSIASI COSA da chiunque abbia chiamato il programma. Potrebbe essere associato a un file, potrebbe essere una pipe per STDIN di un altro processo.
è possibile controllare se il vostro STDOUT è collegato a un tty utilizzando la -t
operator:
if (-t STDOUT) { say 'STDOUT is connected to a tty' }
Come un altro a parte, si prega di notare che è possibile fare in modo che il vostro STDOUT scrive a /dev/tty
chiudendo esplicitamente il filehandle STDOUT e riaprendolo in modo che punti a /dev/tty
:
close STDOUT or die $!;
open STDOUT '>:encoding(utf8)', '/dev/tty' or die $!;
Uno di questi scrive in/dev/tty, uno di questi viene scritto in STDOUT. Era quello che volevi sapere? –
@ JB - non è una distinzione banale per le persone che non conoscono molto con Unix – DVK
@DVK Hai ragione. Ero confuso dall'orientamento Perl della domanda quando l'essenza di esso era Unix. Grazie per l'illuminazione! –