gnuplot画图;现值班表是execl做的,想法:用perl智能排班,CGI显示

#!/usr/bin/perl -w

use strict;

open RADNUM_TOTAL,"/home/gaochong/perl/1.log" or die "$!";
open RADNUM_TOTAL2,">/home/gaochong/perl/2.log" or die "$!";

my (%hash,@list);
while (<RADNUM_TOTAL>) {
        chomp;
        my @list_tmp=split/[ -]+/;
        @list=@list_tmp[0,2,3,4];
        my $ref=\@list;
        if (exists $hash{$list[0]}) {
                $hash{$list[0]}=[$ref->[1]+$list_tmp[2],$ref->[2]+$list_tmp[3],$ref->[3]+$list_tmp[4]];
                }
        else {
                $hash{$list[0]}=[$ref->[1],$ref->[2],$ref->[3]];
        }
}
foreach (sort keys %hash) {
        print RADNUM_TOTAL2 "$_ @{$hash{$_}}\n";
}
close RADNUM_TOTAL2;
close RADNUM_TOTAL;

但结果不对,原文件:
20050114-06:30:00 1 2 3               
20050115-06:30:00 100 200 300         
20050114-06:30:00 10 20 30
我得到得到:(如果日期相同,另对应列相加)
20050114 11 22 33
20050115 100 200 300

得到的结果却是:
20050114 20 40 60
20050115 100 200 300
请问各位,代码问题在哪里?
谢谢!

#!/usr/bin/perl -w

use strict;

open RADNUM_TOTAL,"/home/gaochong/perl/radnum-total.log" or die "$!";
open RADNUM_TOTAL2,">/home/gaochong/perl/radnum-total2.log" or die "$!";

my (%hash,@list);
while (<RADNUM_TOTAL>) {
        chomp;
        my @list_tmp=split/[ -]+/;
        @list=@list_tmp[0,2,3,4];
        my $ref=\@list;
        if (exists $hash{$ref->[0]}) {
          $hash{$ref->[0]}=[$ref->[1]+$hash{$ref->[0]}->[0],$ref->[2]+$hash{$ref->[0]}->[1],$ref->[3]+$hash{$ref->[0]}->[2]];
        }
        else {
                $hash{$list[0]}=[$ref->[1],$ref->[2],$ref->[3]];
        }
}
foreach (sort keys %hash) {
        print RADNUM_TOTAL2 "$_ @{$hash{$_}}\n";
}
close RADNUM_TOTAL2;
close RADNUM_TOTAL;
公司部门的值班表是用execl做的,每月初都要排班还要群发邮件,感觉很不好。
想用perl实现排班,并CGI显示,请问可以实现吗?
需要用到哪些模块?或者有没有现成的代码可以参考?谢谢!
感同身受,关于CGI显示偶也有兴趣,牛人指导,多谢!
请问各位,网上有这方面相关代码吗?希望各位介绍几个。谢谢!
use RRDs;
RRDs::create( ..... );
while(){
    RRDs::update( ..... );
}
RRDs::graph( ....... );

我在cpan没有搜到到 RRDs ,是不是你写错了?