¿Cómo funciona el operador de doble flecha (=>) en Perl?

Sé sobre el uso del hash del operador => , como este

 $ 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 solo la syntax para inicializar los hashes, pero en las respuestas a ¿Cómo puedo calificar una variable como const / final en Perl? , => ha sido usado así

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

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

El operador => en perl es básicamente lo 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 duración, que es todo lo que hace en su ejemplo.

Su ejemplo de Readonly aprovecha la flexibilidad de Perl con argumentos de subrutina al omitir 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.

Aquí hay un ejemplo de cómo usarlo como una coma de una manera inesperada:

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

Desde perlop :

El operador => es un sinónimo de la coma, excepto que hace que su operando izquierdo se interprete como una cadena si comienza con una letra o un guión bajo y está compuesto solo de letras, dígitos y guiones bajos .

Esto incluye operandos que, de lo contrario, podrían interpretarse como operadores, constantes, cadenas v de números únicos o llamadas a funciones. Si tiene dudas sobre este comportamiento, el operando de la izquierda puede citarse explícitamente.

De lo contrario, el operador => se comporta exactamente como el operador de coma o el separador de argumento de lista, según el 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 para documentar la correspondencia entre claves y valores en hashes, y otros elementos emparejados en listas .

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

De PBP :

He encontrado buena información de Perl Best Practices sobre Fat Commas => y creo que debería ser bueno mencionarlo aquí también.

Es mejor reservar la coma de grasa exclusivamente para las siguientes cosas:

Úselo al construir un hash :

 my %h = ( FOO => 23 ); 

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

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

o al crear una constante :

  Readonly my $FOO => "23"; 

Para obtener más detalles, consulte la sección Capítulo 4: Valores y expresiones (Comas gordas) de Perl Best Practices.