Operatøren => (fedt komma) i Perl

Operatøren => anvendes til at adskille værdier. Det er mest almindeligt anvendt i beskrivelsen af Perl hash. Her er et eksempel:

▶ Run
#!/usr/bin/perl

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

Operatøren => er syntaktisk sukker. Denne operator er brugt i stedet for komma operatør ,, men i modsætning til de komma operatør, det tager venstre operand som en streng, uden at skulle sætte det i anførselstegn. Her er en meget lignende beskrivelse af et Perl-hash, men ved hjælp af et komma:

▶ Run
#!/usr/bin/perl

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

I beskrivelsen af hash er altid bedre at bruge operator => til at adskille nøgle-værdi da dette er mere klart kode.

I stedet for komma operatør , du kan altid bruge => (men ikke omvendt). Men det er ikke altid så værd at gøre. Her er en anden beskrivelse af den hash, som fungerer ligesom de to foregående, men ikke har brug for:

▶ Run
#!/usr/bin/perl

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

Operatøren => kaldes ofte "fat komma", fordi det virker som et komma (med nogle tillæg), men består af to tegn i stedet for én.

Venstre operand

Operatøren => mener, at en string left operand kun, hvis følgende betingelser er sande:

  • venstre operand begynder med et bogstav eller symbol _
  • og venstre operand kan kun indeholde bogstaver, tal og symboler _

Så denne kode ikke vil arbejde (fordi venstre operand er et symbol -):

▶ Run
#!/usr/bin/perl

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

Du skal eksplicit angive i some-key citeret: 'some-key'.

Bruger er ikke i hash

Operatøren => i første omgang at bruge til at beskrive værdi par i hash. Det ser ud som pilen, og når de anvendes i hash, det ser meget økologisk — de vigtigste punkter til en værdi. Men operatøren => kan bruges ikke kun hashes, men generelt i alle lister (men ikke altid det giver mening). Her er et eksempel på brug af denne operatør i array:

▶ Run
#!/usr/bin/perl

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

I dette eksempel blev skabt en matrix, der er 3 rækker. Fordi operatøren har været brugt =>, venstre operand kan ikke være omgivet af anførselstegn. Derfor, de to første rækker er brugt uden citationstegn. På den højre operand af denne magi ikke finder anvendelse, så den tredje linje skulle være i anførselstegn.

Dette eksempel ville være bedre til at skrive ved hjælp af operatøren qw:

▶ Run
#!/usr/bin/perl

my @arr = qw(one two three);

Operatøren skal til at skrive sammen

Operatøren => består af to tegn, og disse to tegn skal være ved siden af hinanden. Det er umuligt at placere rummet mellem dem. I dette tilfælde, hvis du skriver = >, vil det være en fejltagelse. Her er et eksempel på en forkert kode:

▶ Run
#!/usr/bin/perl

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

Hvis du køre denne kode, vil det blive vist på skærmen:

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

Officiel dokumentation

Her er et uddrag af output perldoc perlop om operatøren =>:

    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.

Andre artikler