L'operatore => (spessore virgola) in Perl

L'operatore => viene utilizzato per separare i valori. E ' più comunemente usato nella descrizione Perl hash. Ecco un esempio:

▶ Run
#!/usr/bin/perl

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

L'operatore => è zucchero sintattico. Questo operatore viene utilizzato invece di un operatore virgola ,, ma a differenza dell'operatore virgola, si percepisce l'operando di sinistra è come una stringa, senza la necessità di concludere il suo tra virgolette. Ecco tutto simile descrizione Perl hash, ma con l'uso di una virgola:

▶ Run
#!/usr/bin/perl

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

Per la descrizione di hash è sempre meglio utilizzare l'operatore => per la separazione chiave-valore, così come in questo uso è più chiaro il codice.

Invece l'operatore virgola , è sempre possibile utilizzare l'operatore => (ma non viceversa). Ma non è sempre così vale la pena di fare. Ecco una descrizione di hash, che funziona allo stesso modo come i due precedenti, ma così non è bisogna:

▶ Run
#!/usr/bin/perl

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

L'operatore => è spesso chiamato "fat virgola", perché agisce come una virgola (con qualche aggiunta), ma è costituito da due caratteri, invece di uno.

L'operando di sinistra

L'operatore => ritiene stringa l'operando di sinistra solo se le seguenti condizioni sono vere:

  • l'operando di sinistra inizia con la lettera o con il simbolo di _
  • e l'operando di sinistra è composto solo da lettere, numeri e simboli _

Quindi, questo codice non funziona (a causa del fatto che a sinistra operando un simbolo -):

▶ Run
#!/usr/bin/perl

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

Deve essere esplicitamente concludere some-key tra virgolette: 'some-key'.

L'utilizzo non in хешах

L'operatore => in primo luogo vale la pena di utilizzare per descrivere le coppie di valori in хеше. Sembra freccia e quando si utilizza in хеше sembra molto organico — chiave indica il valore. Ma l'operatore => è possibile utilizzare non solo in хешах, ma in generale in tutte le liste (ma non sempre questo ha un senso). Ecco un esempio di uso di questa istruzione in un array:

▶ Run
#!/usr/bin/perl

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

In questo esempio è stato creato un array in cui si trova 3 righe. Poiché è stato utilizzato l'operatore =>, allora l'operando di sinistra non può essere racchiuso tra virgolette. Quindi le prime due righe sono utilizzati senza le virgolette. Sulla destra operando questa magia non si applica, pertanto, la terza riga dovuto essere racchiuso tra virgolette.

Questo esempio sarebbe meglio scrivere con l'operatore qw:

▶ Run
#!/usr/bin/perl

my @arr = qw(one two three);

L'operatore ha bisogno di scrivere insieme

L'operatore => è costituito da due caratteri e questi due caratteri devono essere uno accanto all'altro. Non possono essere inseriti uno spazio tra di loro. Nel caso in cui scrivere = >, quello è un errore. Ecco un esempio di codice sbagliato:

▶ Run
#!/usr/bin/perl

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

Se eseguire questo codice, sullo schermo viene visualizzato:

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

La documentazione ufficiale di

Ecco un frammento di output del comando perldoc perlop pro operatore =>:

    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.

Altri articoli