perl命令之间的区别'=>'和'='

时间:2012-06-14 17:02:28

标签: perl mason

以下perl / mason命令之间有什么区别。

$ test = $ test1; $ test => $ TEST1;

具体如何实例化在这里工作?

3 个答案:

答案 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的关键,而yellowlemon的关键,等等。只要我的键遵循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