+ -
当前位置:首页 → 问答吧 → 怎么都清空不了整个hash,什么原因?

怎么都清空不了整个hash,什么原因?

时间:2010-10-01

来源:互联网

本帖最后由 alfred1980 于 2010-10-01 17:06 编辑

#!/usr/bin/perl -w
use strict;
use File::Basename;
#--------------------------PARAM
my $settle_data="/usr/tta/";

my %workpath=(
"ERRCDR" =>"/local1/",
"ERRFIE"  =>"/local2/",
);

my @sysflow=qw/test1 test2 test3/;

my %filecount;
my %cdrcount;
my $count;
my $tmp_sys1;
my $command;
my $month;
#---------------------------MAIN
$month=substr($ARGV[0],4);

system 'rm ="/usr/tta/count1.log';
open LOGFILE="/usr/tta/count1.log";
foreach(@sysflow){
my $sys_tmp=$_;

if($sys_tmp eq "test1"){
               
  foreach(qw/ERRCDR ERRFIE/)
  {print LOGFILE "**********test1  $_**********\n";
   undef %cdrcount;
   $tmp_sys1=$settle_data.$sys_tmp.$workpath{$_};          #产生find的目录
   $command="find $tmp_sys1 -name \"????.$month*\" -exec wc {} \\;";          #对目录下的文件统计行数
   $count=`$command`;                  #将结果赋予变量
   my @filetmp1=split /\n/,$count;          #将结果存入数组   
   foreach(@filetmp1){
   my @filetmp=split;
   $filecount{basename $filetmp[3]}=$filetmp[0];   #获取文件名和行数,存入hash数组filecount
   }

   foreach(sort keys %filecount)
  {
   $cdrcount{substr($_,0,4)}+=$filecount{$_};      #按文件名头4位字符就行统计
  }
undef %cdrcount;
  foreach(sort keys %cdrcount)
  {
          print LOGFILE "$_,$cdrcount{$_}\n";
                delete $cdrcount{$_};
  }
  }
}
}
close LOGFILE;

-------------------------------
问题:1、无论我在什么地方加入undef %cdrcount 或者用 %cdrcount=()  或者在“print LOGFILE "$_,$cdrcount{$_}\n";”之后用delete单个删除,都无法达到目的
也就是,在第二个循环到ERRFIE的时候,之前hash中的记录还存在!
是不是我的程序逻辑有问题!

作者: alfred1980   发布时间: 2010-10-01

找到原因了,filecount也要清空!!!

作者: alfred1980   发布时间: 2010-10-01

热门下载

更多