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字符串或函数调用的操作数.如果对此行为有疑问,可以显式引用左操作数.
否则,根据上下文,=>运算符的行为与逗号运算符或列表参数分隔符完全相同.
例如:
Run Code Online (Sandbox Code Playgroud)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 );
来自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逗号)部分.