添加每个数组的元素怎么样。?
@a1 = (1..5);
@a2 = (1..3);
@a3 = (1..4);
@tar = ("@a1", "@a2", "@a3");
foreach $each(@tar){
@ar = split(' ',$each);
foreach $eac(@ar){
$tot+=$eac;
}
print "$each total is: $tot\n";
}
在这段代码中给出输出,但是后续总值加上前面的总值。但我期待输出:
1 2 3 4 5 total is: 15
1 2 3 total is: 6
1 2 3 4 total is: 10
答案 0 :(得分:2)
问题是因为你在每个foreach循环中使用相同的变量$ tot。所以它保留了旧的价值。简单的解决方法是在每个循环中首先将$ tot定义为词法变量。
#!/usr/bin/perl
@a1 = (1..5);
@a2 = (1..3);
@a3 = (1..4);
@tar = ("@a1", "@a2", "@a3");
foreach $each(@tar){
my $tot;
@ar = split(' ',$each);
foreach $eac(@ar){
$tot+=$eac;
}
print "$each total is: $tot\n";
}
输出
1 2 3 4 5 total is: 15
1 2 3 total is: 6
1 2 3 4 total is: 10
答案 1 :(得分:0)
如果你想让$ tot的范围只是在循环中,只需在循环中声明它:
for $each (@tar) {
my $tot;
答案 2 :(得分:0)
一些提示:
始终在每个perl脚本中包含use strict;
和use warnings;
。没有例外
始终使用my
声明您的变量,并使用尽可能小的范围。
研究perldsc - Perl Data Structures Cookbook以了解使用数组和数组引用的其他方法。
这些更改会将您的脚本清理为以下符号:
use strict;
use warnings;
my @a1 = (1..5);
my @a2 = (1..3);
my @a3 = (1..4);
my @AoA = (\@a1, \@a2, \@a3);
for my $arrayref (@AoA){
my $total = 0;
for my $val (@$arrayref) {
$total += $val;
}
print "@$arrayref total is: $total\n";
}
输出:
1 2 3 4 5 total is: 15
1 2 3 total is: 6
1 2 3 4 total is: 10