以下perl / mason命令之间有什么区别。
$ test = $ test1; $ test => $ TEST1;
具体如何实例化在这里工作?
答案 0 :(得分:8)
Mason是一个Perl框架。
=
是Perl赋值运算符。 =>
运算符的,
为syntactic sugar。它主要用于散列,以帮助将键与值相关联。以下三个是公平的:
my %hash = ("red", "apple", "yellow", "lemon", "green", "lime");
my %hash = (red => "apple", yellow => "lemon", green => "lime");
my %hash = ("red", apple => "yellow", lemon => "green", "lime");
第一个看起来可能只是一个列表。我必须密切注意它是%hash
而不是@hash
。另外,如果我有100个键值对而不只是其中的3个,那么你可以开始丢失哪些是键,哪些是值。
第二个清楚地表明red
是值apple
的关键,而yellow
是lemon
的关键,等等。只要我的键遵循Perl变量名约定(尽管它们可以在前面包含一个或两个破折号),我也不再需要在我的键周围引用。
第三个就是弄乱你的想法。并向您展示=>
仅仅是语法糖,并不一定将之前的内容与之后的内容联系起来。对Perl来说,它只是一个列表分隔符。你的大脑就是形成这种联系的大脑。
您会看到=>
在函数中使用,如下所示:
my_function(
-bar => $bar_value,
-fubar => $fu_value,
-futz => $futz_value,
);
这是一个名为myFunction
的函数,它将一组键控值作为参数。我也可以这样做:
my_function("-bar", "$bar_value", "-fubar", $fu_value, "-futz", "$futz_value");
然而,这个函数做了这样的事情:
sub my_function {
my %params = @_;
所以,它使用哈希来获取它的参数而不仅仅是列表。当参数的顺序可能变得混乱时,函数倾向于使用散列,因为它太长,或者函数使用的许多参数是可选的。想象一个可能需要用户ID和密码的功能,但不一定需要一个。
您可以在任何情况下使用=>
而不是逗号。例如,Perl中的最新样式不是将括号用于函数参数:
chomp $foo;
比以下更清洁:
chomp( $foo );
但是,当你的函数有多个参数时,这有时会更难阅读:
join ", ", @foo;
在这些情况下,我有时会使用=>
替换命令:
join ", " => @foo;
现在,我可以看到“,”和@foo
都是join
函数的参数。小心,否则它会咬你:
my @array = ( join ", " => @foo, @bar);
与:
相同my @array = ( join ", ", @foo, @bar );
或
my @array = ( join (", ", @foo, @bar ) );
而不是:
my @array = ( join (", ", @foo) , @bar);
仅仅因为我在=>
和", "
之间使用@foo
并不意味着@bar
不属于参数!
答案 1 :(得分:3)
嗯,Perl还是梅森?我不认识梅森,所以我会回答有关Perl的事。
«=
»是赋值运算符。
$test = 'test'; # $test now contains the 4-char string "test".
«=>
»是«,
»的精美版本,可自动引用其左侧。以下都是等效的:
print "a", "b";
print "a" => "b";
print a => "b"; # Auto-quoting in effect
两者都没有与实例化有关,尽管Perl会在使用时自动实例化一个包变量。这通常是一个坏主意,并被use strict;
禁用。 (始终使用use strict; use warnings;
!)
操作员记录在perlop。
中答案 2 :(得分:1)
David的答案是关于Perl赋值运算符=
和,
运算符的语法糖的一个很好的答案。但是如果您使用的是HTML :: Mason,=>
运算符也可以有其他含义。
Mason组件可以从外部源(HTTP请求)或内部源(一个组件调用另一个)获取各种参数,并声明参数的名称和数据类型是通过{{ 1}}阻止:
<%args>
此处<%args>
$width
$admin => 0 # A default value
@items => ( 1, 2, 'something else' )
%pairs => ( key1 => 1, key2 => 'value' )
</%args>
运算符用于指定默认值。并且组件可以使用例如&符标记来调用另一个组件,而不指定任何参数:
=>
或使用<& menu &>
运算符指定一些参数:
=>
您可以查看Mason Book。
的“组件”部分在Mason2(简称为Mason)中,<& menu, width => 640, admin => 1 &>
块消失了,您仍然可以使用<%args>
标记调用组件,但要声明属性,您必须在{{<& &>
内使用Moose'has'语法1}}部分:
<%class>
这里有一些参考:Mason::Manual::Components。