2010-11-04 20 views
14

que sé sobre el uso de hash del operador =>, like this¿Cómo funciona el operador de doble flecha (=>) en Perl?

$ cat array.pl 
%ages = ('Martin' => 28, 
     'Sharon' => 35, 
     'Rikke' => 29,); 

print "Rikke is $ages{Rikke} years old\n"; 
$ perl array.pl 
Rikke is 29 years old 
$ 

y pensé que era sólo la sintaxis para inicializar los hashes, pero en respuestas a How can I qualify a variable as const/final in Perl?, => se ha utilizado como esto

use Readonly; 
Readonly my $infilename => "input_56_12.txt"; 

¿Qué significa exactamente =>? ¿Hay más formas en que se puede usar =>?

+5

Lea la documentación. Debes haber llegado automáticamente a [perldoc perlop] (http://perldoc.perl.org/perlop.html), el lugar donde se puede encontrar información sobre los operadores, antes de publicar esto, y luego puedes hacer una pregunta de aclaración si necesitas. Se está volviendo realmente tedioso tener tantas respuestas simplemente citando de la documentación, esto NO es agregar conocimiento. – Ether

+6

Bastante justo. En mi defensa, hice Google, que rechazó la búsqueda de '=>'. – Lazer

+2

Pero en contra de su defensa, aparentemente se rindió después de eso. –

Respuesta

28

El operador => en perl es básicamente el mismo que coma. La única diferencia es que si hay una palabra sin comillas a la izquierda, se trata como una palabra entre comillas. Entonces, podría haber escrito Martin => 28 que sería lo mismo que 'Martin', 28.

Puede hacer un hash desde cualquier lista de igual longitud, que es todo lo que está haciendo en su ejemplo.

Su ejemplo de Readonly aprovecha la flexibilidad de Perl con argumentos de subrutina omitiendo el paréntesis. Es equivalente a Readonly(my $infilename, "input_56_12.txt"). Readonly es una función exportada por el módulo Readonly que toma dos argumentos: una referencia y un valor. Las partes internas de Readonly merecen otra pregunta si quieres entenderlas.

He aquí un ejemplo de utilizarlo como una coma de una manera inesperada:

$ perl -e 'print hello => "world\n"' 
helloworld 
+0

Entonces, ¿qué significa 'Readonly my $ infilename =>" input_56_12.txt ";' do? – Lazer

+0

Es solo una coma. Podrías reescribirlo como: 'Readonly (my $ infilename," input_56_12.txt ");'. Para obtener más detalles sobre el módulo Readonly (una alternativa a la constante), consulte http://search.cpan.org/perldoc?Readonly –

24

De perlop:

El operador => es un sinónimo de la coma excepto que que provoca su dejó operando para ser interpretado como una cadena si comienza con una letra o subrayado y se compone solo de letras, dígitos y guiones bajos.

Esto incluye operandos que podría de otra manera ser interpretados como operadores, constantes, solo número V-cadenas o llamadas a funciones. Si tiene dudas acerca de este comportamiento , el operando izquierdo puede ser entre comillas explícitamente.

De lo contrario, el operador => se comporta exactamente como el operador coma o la lista separador de argumento, según contexto.

Por ejemplo:

use constant FOO => "something"; 
my %h = (FOO => 23); 

es equivalente a:

my %h = ("FOO", 23); 

no lo es:

my %h = ("something", 23); 

El operador => es útil en documentar la correspondencia entre claves y valores en hash, y otros elementos emparejados en las listas.

%hash = ($key => $value); 
login($username => $password); 

De PBP:

he encontrado una buena información de Perl Best Practices sobre grasa comas=> y yo creo que debe ser buen mencionar aquí también.

Es mejor reservar la grasa comas exclusivamente para las siguientes cosas: -

uso cuando construir un hash:

my %h = (FOO => 23); 

o al pasar argumentos con nombre a una subrutina decir. ,

$text = format_text({FOO => 23, BAR => 30}); 

o cuando c rear una constante:

Readonly my $FOO => "23"; 

Para más detalles, véase el Capítulo 4: valores y expresiones (grasa comas) sección del Perl Best Practices.

Cuestiones relacionadas