32

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

$ 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 Iqualified a variable as const/final in Perl? ,=>一直这样使用

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

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

4

2 回答 2

43

perl 中的=>运算符与逗号基本相同。唯一的区别是,如果左侧有一个未引用的单词,则将其视为引用的单词。所以你可以写Martin => 28which 将与'Martin', 28.

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

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

这是一个以意想不到的方式将其用作逗号的示例:

$ perl -e 'print hello => "world\n"'
helloworld
于 2010-11-04T04:33:06.467 回答
37

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

我从Perl Best Practices中找到了一些关于Fat Commas =>的好信息,我认为在这里也应该提一下。

最好将胖逗号专门用于以下内容:-

在构造哈希时使用它:

my %h = ( FOO => 23 );

或者将命名参数传递给子程序时,即,

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

创建常量时:

 Readonly my $FOO => "23";

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

于 2010-11-04T04:40:51.100 回答