Mason是一个Perl框架,适合那些不知道...
这=是一个Perl赋值运算符.该=>是语法糖的,运营商.它主要用于散列,以帮助将键与值相关联.以下三个是公平的:
my %hash = ("red", "apple", "yellow", "lemon", "green", "lime");
my %hash = (red => "apple", yellow => "lemon", green => "lime");
my %hash = ("red", apple => "yellow", lemon => "green", "lime");
Run Code Online (Sandbox Code Playgroud)
第一个看起来可能只是一个列表.我必须密切注意看到它%hash而不是@hash.另外,如果我有100个键值对而不只是其中的3个,那么你可以开始丢失哪些是键,哪些是值.
第二个非常清楚,这red是值的关键apple,这yellow是关键lemon,等等.请注意,只要我的键遵循Perl变量名约定,我不再需要键周围的引号(尽管它们可以包含一个或前面两个破折号).
第三是只是为了弄乱你的想法.并告诉你,=>是只语法糖,并不一定有什么联系与后会发生什么之前.对Perl来说,它只是一个列表分隔符.你的大脑是形成这种联系的大脑.
你看到=>在这样的函数中使用了这样的:
my_function(
-bar => $bar_value,
-fubar => $fu_value,
-futz => $futz_value,
);
Run Code Online (Sandbox Code Playgroud)
这是一个调用函数myFunction,它将一组键控值作为参数.我也可以做到这一点:
my_function("-bar", "$bar_value", "-fubar", $fu_value, "-futz", "$futz_value");
Run Code Online (Sandbox Code Playgroud)
但是,这个函数做了这样的事情:
sub my_function {
my %params = @_;
Run Code Online (Sandbox Code Playgroud)
所以,它使用哈希作为参数而不仅仅是列表.当参数的顺序可能变得混乱时,函数倾向于使用散列,因为它太长,或者函数使用的许多参数是可选的.想象一个可能需要用户ID和密码的功能,但不一定需要一个.
您可以=>在任何情况下使用它而不是逗号.例如,Perl中的最新样式不是将括号用于函数参数:
chomp $foo;
Run Code Online (Sandbox Code Playgroud)
比以下更清洁:
chomp( $foo );
Run Code Online (Sandbox Code Playgroud)
但是,当您的函数具有多个参数时,有时难以阅读:
join ", ", @foo;
Run Code Online (Sandbox Code Playgroud)
=>在这些情况下,我有时会使用它来替换命令:
join ", " => @foo;
Run Code Online (Sandbox Code Playgroud)
现在,我可以看到","并且@foo都是join函数的参数.小心,否则它会咬你:
my @array = ( join ", " => @foo, @bar);
Run Code Online (Sandbox Code Playgroud)
是相同的:
my @array = ( join ", ", @foo, @bar );
Run Code Online (Sandbox Code Playgroud)
要么
my @array = ( join (", ", @foo, @bar ) );
Run Code Online (Sandbox Code Playgroud)
并不是:
my @array = ( join (", ", @foo) , @bar);
Run Code Online (Sandbox Code Playgroud)
仅仅因为我=>之间仅使用", "而且@foo并不意味着它@bar不是参数的一部分!