操作者 => (脂肪逗号)在Perl

操作者 => 是用于单独的价值。 这是最常用的 在描述Perl散。 这里有一个例子:

▶ Run
#!/usr/bin/perl

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

操作者 => 是语法糖。 这算是用来替代逗号操作员 ,, 但不同的逗号操作者,它需要左边的操作数字符串无需将它 在引号中。 这是一个非常类似的描述Perl散,但是使用一个逗号:

▶ Run
#!/usr/bin/perl

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

在说明的散列的总是更好地使用的操作者 => 到独立的关键价值 由于这种使用是一个更明确的代码。

而不是操作者逗号 , ,你可以随时使用 => (但不是反之亦然)。 但不总是这样 值得做的。 这里是另一个说明中的散列,其工作就像以前的两个,但是不 需要:

▶ Run
#!/usr/bin/perl

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

操作者 => 是通常被称为"油脂逗号,"因为它的行为就像一个逗号(与一些加), 但是,由两个字而不是一个。

左边的操作数的

操作者 => 认为,一串左操作数只有如果满足以下条件:

  • 左边的操作数,开始用字母或符号 _
  • 而左边的操作数,可以仅含有字母、数字和符号 _

所以这种代码不会的工作(因为左边的操作数是一个符号 -):

▶ Run
#!/usr/bin/perl

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

你必须明确地输入到 some-key 援引: 'some-key'.

使用不是在哈希

操作者 => 在第一位是用来描述价值,对在哈希。 它看起来像 箭头和时使用的散列,它看起来非常有机的关键指向一个价值。 但是操作者 => 不仅可以用于散列,但通常在任何清单(但并不总是很有意义). 这里的一个例子是使用这个操作者的阵列:

▶ Run
#!/usr/bin/perl

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

在这个例子中,是创建一系列其是3行。 因为操作者已经使用 =>, 左边的操作数,不能括在引号中。 因此,前两行不使用报价。 在正确操作数的这魔术不适用,因此第三线路已经被封闭在报价。

这个例子就是最好编写使用操作员 qw:

▶ Run
#!/usr/bin/perl

my @arr = qw(one two three);

操作者需要编写一起

操作者 => 包括两个字,这两个人物必须彼此相邻。 这是不可能的地方 它们之间的空间. 在这种情况下,如果你写 = >,这将是一个错误。 这里是一个例子不正确的代码:

▶ Run
#!/usr/bin/perl

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

如果你跑这个代码,它会出现在屏幕上:

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

官方文件

这一段的出 perldoc perlop 有关的操作者 =>:

    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.

其他文章