数组没有被覆盖

cap*_*ser -1 arrays perl

这是一个循环,数组不会被覆盖,它只会增长.

   for ( $j=0; $j <=$#just_ecps ; $j++){
   print "$just_ecps[$j]\n";
   for ($x=0; $x<=$#folder_dates ; $x++){
   my $archivo_histo = "/home/ha2_d11/data/ibprod/archive/$folder_dates[$x]/$just_ecps[$j]/ghistogram.gz";
      next unless (-r $archivo_histo);
      open(FILEHANDLE, "gunzip -c $archivo_histo |") or die ("could not open file $archivo_histo");
      while (<FILEHANDLE>) {
         if ($_ =~ /ave:\s+(\d+\.\d+)\s/){
           push ( @ecp_average , $1);
            sleep 1;
         }
      print "@ecp_average\n";
      }
   }
Run Code Online (Sandbox Code Playgroud)

在每个实例中,最后三个值都是有效的,之前的所有值都是重复的.我需要摆脱重复,只保留最后三个值.

Eislnd1
0.00420743 0.00414601 0.0044511
Eislnd2
0.00420743 0.00414601 0.0044511 0.00303575 0.00309721 0.00302753
Eislnd3
0.00420743 0.00414601 0.0044511 0.00303575 0.00309721 0.00302753 0.0031753 0.00324729 0.00295381
Eislnd4
0.00420743 0.00414601 0.0044511 0.00303575 0.00309721 0.00302753 0.0031753 0.00324729 0.00295381 0.00324191 0.00344244 0.00311481
Run Code Online (Sandbox Code Playgroud)

Eri*_*ikR 7

您需要清除每个文件的数组:

open(FILEHANDLE, "gunzip -c $archivo_histo |") or die ...
@ecp_average = ();
while (<FILEHANDLE>) {
 ...
}
Run Code Online (Sandbox Code Playgroud)

在某些时候,你会想要阅读词法范围的变量(即my声明),但现在这应该工作.