O operador => (grosso vírgula) em Perl

O operador => é usado para separar os valores. É mais comumente usado ao descrever o Perl de hash. Aqui está um exemplo:

▶ Run
#!/usr/bin/perl

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

O operador => é um açúcar sintático. Este operador é usado em vez do operador vírgula ,, mas, em contraste com o operador de vírgula, ele percebe o operando esquerdo como uma seqüência de caracteres, sem a necessidade de delimitar a sua entre aspas. Aqui é completamente semelhante a descrição do Perl de hash, mas com o uso da vírgula:

▶ Run
#!/usr/bin/perl

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

Ao descrever o hash de melhor sempre é usar o operador de => para a divisão de chave-valor pois com tal uso é obtido mais do que um código.

Em vez do operador vírgula , pode-se sempre usar o operador => (mas não vice-versa). Mas não é sempre assim vale a pena fazer. Eis outra descrição de hash, que funciona exatamente como os dois anteriores, mas não é necessário:

▶ Run
#!/usr/bin/perl

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

O operador => é muitas vezes chamado de "gorda por uma vírgula", porque ele age como uma vírgula (com uma espécie de complemento), mas é composto de dois caracteres, em vez de um.

O operando esquerdo

O operador => considera a linha operando esquerdo apenas se as seguintes condições forem verdadeiras:

  • o operando esquerdo começa com uma letra ou com o símbolo de _
  • e o operando esquerdo é composto apenas de letras, números e símbolos _

Então, aqui está o código não irá funcionar (devido ao fato de que no canto operando indirecto é o símbolo do -):

▶ Run
#!/usr/bin/perl

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

Você deve explicitamente concluir some-key entre aspas: 'some-key'.

O uso não хешах

O operador => em primeiro lugar, vale a pena usar para descrever o de pares de valores em хеше. Ele se parece com a seta, e quando você usar o хеше parece muito orgânica — chave indica o valor. Mas o operador => você pode usar não só хешах, mas, em geral, em quaisquer listas (mas nem sempre faz sentido). Eis um exemplo do uso deste operador em uma matriz:

▶ Run
#!/usr/bin/perl

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

Neste exemplo foi criado uma matriz na qual é um hotel de 3 linhas. Porque foi usado o operador =>, o operando esquerdo, você pode não estar entre aspas. Portanto, as duas primeiras linhas são utilizadas sem as aspas. Para o operando da direita esta magia não se aplica, portanto, a terceira linha tinha que estar entre aspas.

Este exemplo seria melhor escrever com o uso de um operador qw:

▶ Run
#!/usr/bin/perl

my @arr = qw(one two three);

O operador precisa escrever juntos

O operador => é composto de dois caracteres e esses dois símbolos devem ser adjacentes uns com os outros. Você não pode postar o espaço entre eles. No caso de se escrever = >, não haverá erro. Aqui está um exemplo de código incorreta:

▶ Run
#!/usr/bin/perl

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

Se você executar este código, em seguida, aparecerá na tela:

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

A documentação oficial

Aqui está um trecho da saída do comando perldoc perlop sobre o operador =>:

    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.

Outros artigos