在perl中的一行上声明多个变量

Håk*_*and 16 perl

我发现我可以在一个语句中声明两个变量:

my ($a,$b)=(1,2);
Run Code Online (Sandbox Code Playgroud)

但我认为这种语法可能会令人困惑,例如,如果我们有五个变量声明,那么很难看出哪个值属于哪个变量.所以我认为如果我们可以使用这种语法会更好:

my $a=1, $b=2;
Run Code Online (Sandbox Code Playgroud)

我想知道,为什么在Perl中这种声明是不可能的?还有其他选择吗?

(我试图避免重蹈my像每个声明:my $a=1; my $b=2;)

ike*_*ami 17

否.声明的变量my仅在下一个语句开始时命名.您可以分配给新创建的变量的唯一方法是分配给它返回的变量.想想my作为new也声明.

至于你的特定代码,

my $a=1, $b=2;
Run Code Online (Sandbox Code Playgroud)

手段

((my $a)=1), ($b=2);
Run Code Online (Sandbox Code Playgroud)

显然,没有好处.

如果你使用过尚未声明的变量[1],你就会遇到严格的错误.


  1. $a并且$b在每个命名空间中预先声明以方便使用sort.

  • @HåkonHægland:我认为值得指出的是,在一个正确编写的Perl程序中,你不太可能需要一次声明和定义这么多变量.变量应该声明为尽可能接近它们的第一个使用点,如果你认为你需要在程序的同一点创建五个或更多变量,那么你应该看一个散列或数组?我不相信在使用这种语言的十五年里我曾经见过这样的Perl代码. (5认同)
  • 也许吧,但是它允许`open(我的$ fh,...)`和`while(我的$ line = <>){}`比'my $ fh'更麻烦; 打开($ fh,...)`和`{my $ line; while($ line = <>){}}`.总的来说,Perl的方法胜过你建议的方法.也就是说,没有什么能阻止声明语句(你想要的)和声明表达式(`my`)并行存在.甚至可以使用CPAN模块添加声明语句,方法与Syntax :: Feature :: Loop添加关键字`loop {...}`的方式相同. (2认同)

Don*_*kby 17

我是Perl的新手,但我会告诉你到目前为止我学到了什么.

我将改为使用$start$end不是$a$b,因为$a并且$b是始终声明的特殊变量.

要回答原始问题,您可以在一行中声明和分配多个变量,如下所示:

my ($start, $end) = (1, 2);
Run Code Online (Sandbox Code Playgroud)

就个人而言,我发现大约相同的打字和不清楚,而不是单独一行:

my $start = 1;
my $end = 2;
Run Code Online (Sandbox Code Playgroud)

但是,我认为将子例程参数分配给命名变量很有用,因为子例程参数位于名为的列表中@_:

use strict;

sub print_range {
    my ($start, $end) = @_;
    print "Range is from $start to $end.\n";
}

print_range(10, 20); # => Range is from 10 to 20.
Run Code Online (Sandbox Code Playgroud)

您可以my文档中看到更多的语句怪癖,包括忽略列表中某些值的方法.


Abh*_*rma 7

下面是在perl中的一行中声明多个变量的方法:

我的($ day,$ mon,$ year,$ hr,$ min,$ sec)=(0)x 6;

这里,所有上述变量都已用0初始化.使用重复运算符'x'.