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

Laz*_*zer 22 perl hash operators perl-data-structures

我知道=>运算符的哈希使用,就像这样

$ 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
$
Run Code Online (Sandbox Code Playgroud)

我认为这只是初始化哈希的语法,但在答案中如何在Perl中将变量限定为const/final?,=>已经被这样使用了

use Readonly;
Readonly my $infilename => "input_56_12.txt";
Run Code Online (Sandbox Code Playgroud)

究竟是什么=>意思?有更多的方法=>可以使用吗?

Ben*_*son 36

=>perl中的运算符与逗号基本相同.唯一的区别是,如果左边有一个不带引号的单词,它就像被引用的单词一样对待.所以你可以写出Martin => 28与之相同的内容'Martin', 28.

你可以从任何偶数长度列表中创建一个哈希值,这就是你在你的例子中所做的一切.

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

以下是以意外方式将其用作逗号的示例:

$ perl -e 'print hello => "world\n"'
helloworld
Run Code Online (Sandbox Code Playgroud)


Nik*_*ain 32

来自perlop:

=>操作是除了逗号的代名词它会导致它是否以字母开头或下划线,只有字母,数字和下划线组成其左操作数被解释为一个字符串.

这包括可能被解释为运算符,常量,单个数字v字符串或函数调用的操作数.如果对此行为有疑问,可以显式引用左操作数.

否则,根据上下文,=>运算符的行为与逗号运算符或列表参数分隔符完全相同.

例如:

use constant FOO => "something";
my %h = ( FOO => 23 );
Run Code Online (Sandbox Code Playgroud)

相当于:

my %h = ("FOO", 23);
Run Code Online (Sandbox Code Playgroud)

它不是:

my %h = ("something", 23);
Run Code Online (Sandbox Code Playgroud)

=>操作者是在记录键和值在散列,并且在列出了其他成对的元件之间的对应关系有帮助.

%hash = ( $key => $value );
login( $username => $password );
Run Code Online (Sandbox Code Playgroud)

来自PBP:

我从Perl最佳实践中找到了一些关于Fat Commas的 好信息=>,我认为在这里也应该提一下.

最好将胖字逗号保留为以下内容: -

构造哈希时使用它:

my %h = ( FOO => 23 );
Run Code Online (Sandbox Code Playgroud)

或者将命名参数传递给子例程,即.

$text = format_text({FOO => 23, BAR => 30});
Run Code Online (Sandbox Code Playgroud)

或者在创建常量时:

 Readonly my $FOO => "23";
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅Perl最佳实践的第4章:值和表达式(Fat逗号)部分.