Operator => (lemak koma) di Perl

Operator => digunakan untuk memisahkan nilai-nilai. Hal ini paling sering digunakan dalam deskripsi Perl hash. Berikut ini sebuah contoh:

▶ Run
#!/usr/bin/perl

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

Operator => adalah sintaksis gula. Operator ini digunakan sebagai pengganti koma operator ,, tapi tidak seperti operator koma, dibutuhkan operan kiri string tanpa harus melampirkan dalam tanda kutip. Di sini adalah sangat mirip dengan deskripsi dari Perl hash, tetapi menggunakan tanda koma:

▶ Run
#!/usr/bin/perl

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

Dalam deskripsi hash selalu lebih baik untuk menggunakan operator => untuk memisahkan nilai kunci sejak penggunaan ini adalah kode yang jelas.

Bukan koma operator , anda selalu dapat menggunakan => (tapi tidak sebaliknya). Tapi tidak selalu begitu layak dilakukan. Berikut ini adalah keterangan dari hash yang bekerja seperti dua sebelumnya, tapi tidak membutuhkan:

▶ Run
#!/usr/bin/perl

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

Operator => sering disebut "lemak koma" karena itu bertindak seperti sebuah koma (dengan beberapa penambahan), tapi terdiri dari dua karakter, bukan satu.

Operan kiri

Operator => menganggap string operan kiri hanya jika kondisi berikut ini benar:

  • operan kiri dimulai dengan huruf atau simbol _
  • dan operan kiri mungkin hanya berisi huruf, angka, dan simbol-simbol _

Jadi kode ini tidak akan bekerja (karena operan kiri adalah simbol -):

▶ Run
#!/usr/bin/perl

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

Anda secara eksplisit harus masuk ke some-key dikutip: 'some-key'.

Tidak di hash

Operator => di tempat pertama adalah untuk digunakan untuk menggambarkan pasangan nilai di hash. Sepertinya panah dan ketika digunakan di hash, terlihat sangat organik — poin-poin penting untuk sebuah nilai. Tapi operator => dapat digunakan tidak hanya hash, tetapi umumnya di setiap daftar (tapi tidak selalu masuk akal). Berikut adalah contoh penggunaan operator ini dalam array:

▶ Run
#!/usr/bin/perl

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

Dalam contoh ini, diciptakan sebuah array yang 3 baris. Karena operator telah digunakan =>, operan kiri tidak dapat tertutup dalam tanda kutip. Oleh karena itu, dua baris pertama digunakan tanpa tanda kutip. Di sebelah kanan operan dari sihir ini tidak berlaku, sehingga baris ketiga harus tertutup dalam tanda kutip.

Contoh ini akan lebih baik untuk menulis menggunakan operator qw:

▶ Run
#!/usr/bin/perl

my @arr = qw(one two three);

Operator perlu untuk menulis bersama-sama

Operator => terdiri dari dua karakter dan dua karakter harus sama di samping satu sama lain. Hal ini tidak mungkin untuk menempatkan ruang antara mereka. Dalam hal ini jika anda menulis = >, itu akan menjadi kesalahan. Berikut adalah contoh kode yang salah:

▶ Run
#!/usr/bin/perl

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

Jika anda menjalankan kode ini, maka akan muncul pada layar:

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

Dokumentasi resmi

Berikut adalah cuplikan dari output perldoc perlop tentang operator =>:

    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.

Artikel lainnya