我发现我可以使用以下命令在一个语句中声明两个变量:
my ($a,$b)=(1,2);
但我认为这种语法可能会令人困惑,例如,如果我们有五个变量声明,那么很难看出哪个值属于哪个变量。所以我认为如果我们可以使用这种语法会更好:
my $a=1, $b=2;
我想知道,为什么在Perl中这种声明是不可能的?还有其他选择吗?
(我试图避免为每个声明重复my
,例如:my $a=1; my $b=2;
)
答案 0 :(得分:17)
我是Perl的新手,但我会告诉你到目前为止我学到了什么。
我将改为使用$start
和$end
代替$a
和$b
,因为$a
和$b
是始终声明的特殊变量。
要回答原始问题,您可以在一行中声明和分配多个变量,如下所示:
my ($start, $end) = (1, 2);
就我个人而言,我发现大约相同的打字并且不清楚,而不是单独一行:
my $start = 1;
my $end = 2;
但是,我认为将子程序参数分配给命名变量很有用,因为子程序参数位于名为@_
的列表中:
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.
您可以在the documentation中看到my
语句的更多怪癖,包括忽略列表中某些值的方法。
答案 1 :(得分:16)
没有。 my
声明的变量仅在下一个语句开始时命名。您可以分配给新创建的变量的唯一方法是分配给它返回的变量。将my
视为同时声明的new
。
至于您的特定代码,
my $a=1, $b=2;
装置
((my $a)=1), ($b=2);
显然,没有好处。
如果您使用过尚未声明 [1] 的变量,则会出现严格错误。
$a
和$b
在每个命名空间中预先声明,以方便sort
的使用。答案 2 :(得分:7)
下面是在perl中在一行中声明多个变量的方法:
我($ day,$ mon,$ year,$ hr,$ min,$ sec)=(0)x 6;
这里,所有上述变量都已用0初始化。重复运算符' x'用来。
答案 3 :(得分:0)
为避免在这些情况下出现混淆,通常可以这样做:
my ($a, $b, $c, $d) = (
1, # => $a
2, # => $b
3, # => $c
4 # => $d
);
池上注意到另一种选择是:
my $a = 1;
my $b = 2;
my $c = 3;
my $d = 4;
答案 4 :(得分:0)
对于变量声明,我认为my ($a,$b)=(1,2);
绝对足够。
但是对于哈希值初始化,您可以使用此语法...
my $stuff = {};
$stuff->{hello} = $stuff->{thing} = 123;
print(Dumper($stuff));
这里的结果将是...
$VAR1 = {
'hello' => 123,
'thing' => 123
};
这很整洁,因为您可以将不同数组的不同键初始化为相同的值。
您只能为每个值使用相同的值,但这对于哈希初始化来说可能是完美的选择。
答案 5 :(得分:-1)
我采用了这种方法。
map { ($_) = '' } my ($x, $y, $z);
将数字替换为 0 的 ''。
你不需要计算任何东西。
我把 $_ 放在 () 中是为了让 perlcritic 误以为我知道我在做什么 :)
我能想到的对变量值使用此方法的唯一方法是执行以下操作:-
my @v = (1,23,'Bill',41);
map {($_) = shift @v} my ($x,$y,$r,$s);
或者如果已经定义了一些:-
my $x = 7;
my @v = (1,23,'Bill',41);
map {($_) = shift @v} ($x,my ($y,$r,$s));