Các nhà điều hành => (chất béo, dấu phẩy) trong Perl

Các nhà điều hành => được sử dụng để tách giá trị. Nó là thông dụng nhất trong các mô tả của Perl băm. Đây là một ví dụ:

▶ Run
#!/usr/bin/perl

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

Các nhà điều hành => là cú pháp đường. Này điều hành được sử dụng thay dấu phẩy điều hành ,, nhưng không giống như những dấu phẩy điều hành, nó có trái toán hạng như một chuỗi mà không cần phải đặt nó trong báo hiệu. Đây là một rất giống mô tả của Perl băm, nhưng bằng cách sử dụng một dấu phẩy:

▶ Run
#!/usr/bin/perl

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

Trong các mô tả của băm luôn là tốt hơn để sử dụng sự điều hành => tách chìa khóa giá trị kể từ này được sử dụng là một rõ ràng hơn mã.

Thay vì những dấu phẩy điều hành , bạn luôn có thể sử dụng => (nhưng không phải Ngược lại). Nhưng không phải luôn như vậy đáng làm. Đây là một mô tả của băm, có hoạt động giống như hai lần trước, nhưng không cần:

▶ Run
#!/usr/bin/perl

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

Các nhà điều hành => thường được gọi là "béo, dấu phẩy" bởi vì nó hoạt động như một dấu phẩy (với một số ngoài), nhưng bao gồm hai nhân vật thay vì một.

Bên trái toán hạng

Các nhà điều hành => xem xét một chuỗi trái toán hạng chỉ khi điều kiện sau đây là đúng:

  • bên trái toán hạng bắt đầu với một lá thư hoặc biểu tượng _
  • và trái toán hạng có thể chỉ chứa thư, số và biểu tượng _

Vì vậy, mã này sẽ không làm việc (bởi vì trái toán hạng là một biểu tượng -):

▶ Run
#!/usr/bin/perl

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

Bạn phải rõ ràng nhập vào some-key trích dẫn: 'some-key'.

Sử dụng không phải là băm

Các nhà điều hành => ở nơi đầu tiên được sử dụng để miêu tả cặp giá trị trong băm. Nó trông giống như những mũi tên và khi được sử dụng trong băm, nó trông rất hữu — chìa khóa điểm để một giá trị. Nhưng các nhà điều hành => có thể được sử dụng không chỉ băm, nhưng thường là ở bất kỳ danh sách (nhưng không phải lúc nào nó có ý nghĩa). Đây là một ví dụ, dùng cái này điều hành trong mảng:

▶ Run
#!/usr/bin/perl

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

Trong ví dụ này, đã tạo ra một mảng đó là 3 hàng. Bởi vì điều hành đã được sử dụng =>, bên trái toán hạng không thể nằm trong dấu nháy. Vì vậy, hai hàng đầu tiên được sử dụng không dấu. Trên toán hạng phải của ma thuật này không áp dụng, vậy thứ ba đường dây đã được bao bọc trong trích dẫn.

Ví dụ này sẽ tốt hơn để viết sử dụng điều hành qw:

▶ Run
#!/usr/bin/perl

my @arr = qw(one two three);

Các nhà điều hành cần phải viết lại với nhau

Các nhà điều hành => bao gồm hai nhân vật và những hai nhân vật phải được bên cạnh nhau. Nó không thể đến nơi không gian giữa họ. Trong trường hợp đó, nếu bạn viết = >, nó sẽ là một sai lầm. Đây là một ví dụ của mã không chính xác:

▶ Run
#!/usr/bin/perl

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

Nếu bạn chạy mã này, nó sẽ xuất hiện trên màn hình:

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

Tài liệu chính thức

Đây là một đoạn trong đầu ra perldoc perlop về các nhà điều hành =>:

    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.

Các bài viết khác