# my code as follows
use strict;
use FileHandle;
my @LISTS = ('incoming');
my $WORK ="c:\";
my $OUT ="c:\";
foreach my $list (@LISTS) {
my $INFILE = $WORK."test.dat";
my $OUTFILE = $OUT."TEST.dat";
while (<$input>) {
chomp;
my($f1,$f2,$f3,$f4,$f5,$f6,$f7) = split(/\|/);
push @sum, $f4,$f7;
}
}
while (@sum) {
my ($key,$value)= {shift@sum, shift@sum};
$hash{$key}=0;
$hash{$key} += $value;
}
while my $key (@sum) {
print $output2 sprintf("$key1\n");
# print $output2 sprintf("$key ===> $hash{$key}\n");
}
close($input);
close($output);
我收到错误添加未初始化错误(+)如果我使用第二次打印 如果我使用1st Print,我会得到HASH(0x19a69451)值。 我请你纠正我。
我的输出应该是
unique Id ===> Total Revenue ($f4==>$f7)
答案 0 :(得分:5)
这是错误的:
"c:\";
Perl将其读作以c:";\n...
开头的字符串。或者换句话说,它是一个逃跑的字符串。您需要将最后一个字符写为\\
以转义\
并阻止它转义后续的"
字符
答案 1 :(得分:2)
您可能想要使用parens而不是大括号:
my ($key, $value) = (shift @sum, shift @sum);
如果Unintialized error at addition (+)
数组的元素数量奇数,您会收到@sum
警告。
另见perltidy。
答案 2 :(得分:0)
你不应该进入第二个while循环:
while my $key (@sum) {
因为前一个数组使数组@sum
为空。
您可以更改为:
while (<$input>) {
chomp;
my @tmp = split(/\|/);
$hash{$tmp[3]} += $tmp[6];
}
print Dumper \%hash;