2011-09-21 14 views
8

Che cosa significa >:scalar?

non vedono mai questo tipo di codice prima ..

risposta

9

La particolare ">: COSA" Sintassi dice al sistema Perl IO di utilizzare il livello specificato dalla COSA. Dai uno sguardo allo PerlIO documentation per "layer". I livelli comuni sono "raw" e "utf8".

In questo caso, questo consente di utilizzare $ stdout come file in memoria che dovrebbe finire per contenere qualsiasi cosa venga inviata a STDOUT. Più in generale, la sintassi ti consente di aprire un file in memoria, quindi inviare il filehandle ad altre funzioni che normalmente scrivono sui file, in modo che tu possa raccogliere il loro output (o fornire il loro input).

È inoltre possibile ottenere lo stesso risultato con l'apertura di un "file" che è un riferimento ad uno scalare:

open my $fh, ">:scalar", \$scalar or die; 
open my $fh, ">", \$scalar or die; 

E 'fornito da PerlIO, e realizzato dal PerlIO::scalar, anche se non c'è bisogno di 'uso 'il modulo per accedere alla funzionalità.

+0

Cosa significa '>: scalare'? – asker

+0

L'ho aggiunto all'inizio. – Alex

3

Perl utilizza un layered IO system. Nella parte inferiore della catena, si trova un livello che si occupa dell'accesso ai media. scalar è il livello del sistema IO che gestisce la lettura e la scrittura su uno scalare anziché su un file. Dire

open(my $fh, '>:scalar', \$scalar) 

per maniglie scalari è l'equivalente di dire

open(my $fh, '>:unix', $file_name) 

per maniglie OS. È completamente ridondante, dal momento che Perl sa già che è un handle scalare e non un handle del SO.