怎么都清空不了整个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中的记录还存在!
是不是我的程序逻辑有问题!
#!/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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28