Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何刷新foreach循环中的数组?_Perl_Arrays_Hash_Perl Module - Fatal编程技术网

Perl 如何刷新foreach循环中的数组?

Perl 如何刷新foreach循环中的数组?,perl,arrays,hash,perl-module,Perl,Arrays,Hash,Perl Module,我正在编写一个Perl脚本来对散列进行一些数学运算。此哈希包含以下示例中给出的值。我已经写了下面的代码。如果我在不使用foreach循环的情况下为数组值单独执行这段代码,那么输出就可以了。但是如果我在数组值上使用foreach循环来运行它,那么a中的值的和是好的,但是从B的输出中添加前面的值 Hash Sample: $VAR1 = 'A'; $VAR2 = { '"x"' => [values], '"y"' => [values], and so on.

我正在编写一个Perl脚本来对散列进行一些数学运算。此哈希包含以下示例中给出的值。我已经写了下面的代码。如果我在不使用foreach循环的情况下为数组值单独执行这段代码,那么输出就可以了。但是如果我在数组值上使用foreach循环来运行它,那么a中的值的和是好的,但是从B的输出中添加前面的值

Hash Sample:

$VAR1 = 'A';
$VAR2 = {
    '"x"' => [values],
    '"y"' => [values],
    and so on...
$VAR3 = 'B';
$VAR4 = {
        '"x"' => [values],
    '"y"' => [values],
    and so on...
$VARn....
代码:

我认为问题在于这一行。它存储所有以前的值,从而在下一个foreach循环中添加所有值

push @data, $ec;
因此,我有两个问题:

1) 如何在每次foreach循环迭代中刷新数组(@data)

2) 如何在数组ref($ec)中添加值并将其存储在数组中?因为当我使用以下代码时:

for $ec ($table{$h}{$et}) {
    @count = map { sum(@{$_}) } @$ec;
    $total = sum(@count);
}
输出为@count和$total提供了相同的值


请给我一些建议。

如果我理解正确,只需对代码做一点小小的修改。在for循环的开头创建一个空数组(
@data
)。希望这有帮助

        for my $h (sort keys %table) {
                  my @data;

如果我理解正确的话,只需对代码进行一点小的更改。在for循环的开头创建一个空数组(
@data
)。希望这有帮助

        for my $h (sort keys %table) {
                  my @data;
1) 在循环体的顶部声明@data数组,在这里您希望以一个新的空数组开始。或者你的意思是说
@data=@$ec
,而不是
推送@data,$ec

2) 要在$ec引用的数组中添加值,只需说
sum(@$ec)
;不需要地图

还不完全清楚您的数据结构是什么,或者您正试图用它做什么。 查看示例%表的外观以及您期望从中得到的结果会有所帮助。

1)在循环体的顶部声明@data数组,您希望从一个新的空数组开始。或者你的意思是说
@data=@$ec
,而不是
推送@data,$ec

2) 要在$ec引用的数组中添加值,只需说
sum(@$ec)
;不需要地图

还不完全清楚您的数据结构是什么,或者您正试图用它做什么。
查看示例%表的外观以及您期望从中得到的结果会有所帮助。

事实上,您只需要说
my@data在循环中,每次通过它都将是一个新的
@data
是没有意义的。当您使用
my
创建一个数组时,它开始时为空。给它分配一个空列表并没有任何作用,这是您和Perl的时间在循环中,每次通过它都将是一个新的
@data
是没有意义的。当您使用
my
创建一个数组时,它开始时为空。为其分配一个空列表不会产生任何效果,这是您和Perl的时间。