2011-09-21 15 views
8

¿Qué significa >:scalar?

nunca ven este tipo de código antes ..

Respuesta

9

El especial ">: COSA" sintaxis le dice al sistema IO Perl para usar la capa especificada por COSA. Eche un vistazo a PerlIO documentation para 'capa'. Las capas comunes son 'raw' y 'utf8'.

En este caso, esto le permite usar $ stdout como un archivo en memoria que debería contener todo lo que se envía a STDOUT. De manera más general, la sintaxis le permite abrir un archivo en memoria, luego enviar el manejador de archivo a otras funciones que normalmente escriben en los archivos, para que pueda recopilar su salida (o proporcionar su entrada).

También puede conseguir el mismo resultado mediante la apertura de un "archivo", que es una referencia a un escalar:

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

Está proporcionada por PerlIO, e implementado por PerlIO::scalar, a pesar de que no tiene que 'uso 'el módulo para acceder a la funcionalidad.

+0

¿Qué significa '>: escalar'? – asker

+0

Lo he agregado al principio. – Alex

3

Perl usa un layered IO system. En la parte inferior de la cadena, se encuentra una capa que trata sobre el acceso a los medios. scalar es la capa del sistema IO que maneja la lectura y escritura de un escalar en lugar de un archivo. Diciendo

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

para las manijas escalares es el equivalente a decir

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

de identificadores de sistema operativo. Es completamente redundante, ya que Perl ya sabe que es un identificador escalar y no un controlador del sistema operativo.