El operador de => (gordo coma) en Perl

El operador de => se utiliza para la separación de los valores. A menudo se utiliza al describir el Perl de hash. He aquí un ejemplo:

▶ Run
#!/usr/bin/perl

my %h = (
    a => 1,
    b => 2,
);

El operador de => es el azúcar. Este operador se utiliza en lugar del operador coma ,, pero a diferencia del operador coma, él percibe el operando de la izquierda como una cadena, sin necesidad de concertar su entre comillas. Aquí es completamente similar a la descripción del Perl de hash, pero con el uso de la coma:

▶ Run
#!/usr/bin/perl

my %h = (
    'a', 1,
    'b', 2,
);

En la descripción de hash, siempre es mejor utilizar el operador de => para la separación de clave-valor, ya que de este modo, resulta más ilustrativo de código.

En lugar del operador coma , siempre se puede utilizar el operador de => (pero no viceversa). Pero no siempre es así vale la pena hacer. He aquí una descripción de hash, que funciona tan bien como los dos anteriores, pero no es necesario:

▶ Run
#!/usr/bin/perl

my %h = (
    a => 1 =>
    b => 2 =>
);

El operador de => a menudo se llama "gorda coma", porque actúa como una coma (con un suplemento), pero se compone de dos caracteres, en lugar de uno.

El operando de la izquierda

El operador de => considera la cadena el operando de la izquierda sólo si se cumplen las condiciones siguientes:

  • el operando de la izquierda comienza con una letra o con un carácter _
  • y el operando de la izquierda es sólo de letras, números y símbolos _

Por lo tanto, aquí está el código no funcionará (por el hecho de que en el operando de la izquierda es el símbolo de la -):

▶ Run
#!/usr/bin/perl

my %h = (
   some-key => 3, # error!
);

Explícitamente debe concluir some-key entre comillas: 'some-key'.

El uso no хешах

El operador de => en primer lugar, hay que utilizar para la descripción de los pares de valores en хеше. Se ve como la flecha y cuando se utiliza en хеше se ve muy orgánico — clave indica el valor. Pero el operador de => se puede utilizar no sólo en хешах, pero en general en todas las listas (pero no siempre tiene sentido). He aquí un ejemplo del uso de esta instrucción en la matriz:

▶ Run
#!/usr/bin/perl

my @arr = ( one => two => 'three' );

En este ejemplo, se crea una matriz en la que se encuentra con 3 en una fila. Ya que se ha utilizado el operador de =>, es el operando de la izquierda puede no escribirse entre comillas. Por lo tanto, las dos primeras filas se utilizan sin las comillas. En el operando a la derecha que esta magia no se aplica, por lo tanto, la tercera cadena tuvo que ir entre comillas.

En este ejemplo, sería mejor escribir con el uso del operador de qw:

▶ Run
#!/usr/bin/perl

my @arr = qw(one two three);

El operador de la necesidad de escribir se quedan pegadas

El operador de => se compone de dos caracteres y estos dos caracteres deben estar cerca el uno con el otro. No se puede publicar el espacio entre ellos. En caso de que escribir = >, lo que se producirá un error. He aquí un ejemplo de código de error:

▶ Run
#!/usr/bin/perl

my %h = (
    a = > 1, # error!
);

Cuando se ejecuta este código, en la pantalla aparecerá:

syntax error at script.pl line 4, near "= >"
Execution of script.pl aborted due to compilation errors.

La documentación oficial

He aquí un fragmento de la salida del comando perldoc perlop sobre el operador de =>:

    The "=>" operator (sometimes pronounced "fat comma") is a synonym for the
    comma except that it causes a word on its left to be interpreted as a
    string if it begins with a letter or underscore and is composed only of
    letters, digits and underscores. This includes operands that might
    otherwise be interpreted as operators, constants, single number v-strings
    or function calls. If in doubt about this behavior, the left operand can
    be quoted explicitly.

    Otherwise, the "=>" operator behaves exactly as the comma operator or list
    argument separator, according to context.

    For example:

        use constant FOO => "something";

        my %h = ( FOO => 23 );

    is equivalent to:

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

    It is NOT:

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

    The "=>" operator is helpful in documenting the correspondence between
    keys and values in hashes, and other paired elements in lists.

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

    The special quoting behavior ignores precedence, and hence may apply to
    part of the left operand:

        print time.shift => "bbb";

    That example prints something like "1314363215shiftbbb", because the "=>"
    implicitly quotes the "shift" immediately on its left, ignoring the fact
    that "time.shift" is the entire left operand.

Otros articulos