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

boz*_*ser 1 perl mason

以下perl/mason命令之间的区别是什么.

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

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

Dav*_* W. 8

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不是参数的一部分!