代码之家  ›  专栏  ›  技术社区  ›  Aakash Goel

在Perl中,双箭头(=>)运算符如何工作?

  •  19
  • Aakash Goel  · 技术社区  · 14 年前

    我知道使用 => 接线员, like this

    $ cat array.pl
    %ages = ('Martin' => 28,
             'Sharon' => 35,
             'Rikke' => 29,);
    
    print "Rikke is $ages{Rikke} years old\n";
    $ perl array.pl
    Rikke is 29 years old
    $
    

    我以为这只是初始化散列的语法,但是 How can I qualify a variable as const/final in Perl? => 被这样使用过

    use Readonly;
    Readonly my $infilename => "input_56_12.txt";
    

    具体做什么 意思是?有没有更多的方法 => 可以使用吗?

    2 回复  |  直到 7 年前
        1
  •  36
  •   Ben Jackson    14 年前

    这个 => perl中的运算符基本上与逗号相同。唯一的区别是,如果左边有一个未被引用的词,它会被当作一个被引用的词。所以你可以写 Martin => 28 这和 'Martin', 28

    您可以从任何偶数长度的列表中生成散列,这就是您在示例中所做的全部工作。

    您的只读示例通过省略括号来利用Perl对子程序参数的灵活性。相当于 Readonly(my $infilename, "input_56_12.txt") . Readonly是Readonly模块导出的一个函数,它接受两个参数:引用和值。如果你想了解Readonly的内部,那么它值得你再问一个问题。

    $ perl -e 'print hello => "world\n"'
    helloworld
    
        2
  •  32
  •   CJ7    9 年前

    perlop :

    => 运算符是 逗号除外 要解释为字符串的操作数 如果它以字母或 字母、数字和下划线 .

    否则被解释为运算符, 常数,单数字v字符串或 行为,左操作数可以是 明确引用。

    否则,=>运算符的行为 与逗号运算符或列表完全相同 上下文。

    例如:

    use constant FOO => "something";
    my %h = ( FOO => 23 );
    

    相当于:

    my %h = ("FOO", 23);
    

    它不是:

    my %h = ("something", 23);
    

    => 操作员是 有助于 记录 散列中的键和值,以及其他 列表中的成对元素 .

    %hash = ( $key => $value );
    login( $username => $password );
    

    PBP公司 :

    我从 关于 粗逗号 => 我觉得在这里也应该提一下。

    使用它时 构造散列

    my %h = ( FOO => 23 );
    

    或路过时 子例程的命名参数 即。,

    $text = format_text({FOO => 23, BAR => 30});
    

    或者什么时候 创建常数 :

     Readonly my $FOO => "23";