还是除数为0的问题各位老师请进

还是除数为0的问题各位老师请进

改写后的代码和文本:
#!/usr/bin/perl -w
use strict;
use warnings;
my $localdir="D:\\tempf10";   #!!!设定F10所在目录
opendir DH,$localdir or die "XX  OO$!";#打开文件句柄
foreach  (readdir DH) {
        next if $_ eq "." or $_ eq "..";#不要2个.文件
        $_="$localdir\\$_";             #文件名前加全路径
        open INTXT,"< $_" or die"Can't open file $_: $!\n";
       
my %mark=('上海A股'=>'SH','深圳A股'=>'SZ','中小企业板'=>'SZ');
my ($code,$m)=();          
my $bf_mark="证券类别"; #!!!取证券类别和代码需要的3个变量,不同的F10需要修改
my $bf_code="证券代码";
my $cn="[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]";
my @block;
                while (<INTXT>) {
                        chomp;
                                #print "$_\n";      # 测试文件读取打开
#===========================以下是取市场和代码=====================================               
            
                                         #龙讯版-提取市场和代码需用的关键字保存在$bf_mark,$bf_code
                if (/│$bf_mark │($cn+)\s+/x) {
            $m=$1;
                        #print "$mark{$m}\n"; next;#取得市场类别
                }
        if (/│$bf_code │ (\d{6})/x) {
                        $code=$1;
                        #print "$code\n";     #取得证券代码
                }
my $star="【历年简要财务指标】";    #!!!设定处理块的开头
my $end ="【资产负债简表】";            #!!!设定处理块的结尾
if (/$star/../$end/) {
                   push @block,$_;
                                }
                                          }
                                       
                               
#==============以上是取市场和代码以及把处理块保存在@block==========
my @data;
my @date;

        foreach (@block) {
                my ($target,$target_1)=qw (净利润.万. 指标.报告期);#!!!设定提取项
               
                if (/.*$target_1.*/) {
       m/(\d+-\d+-\d+)\D*(\d+-\d+-\d+)\D*(\d+-\d+-\d+)\D*(\d+-\d+-\d+)/;
        my @record =  ($1, $2, $3, $4);
        @date = (@date, @record)
        }
               
                if (/.*$target.*/) {
       m/(\d+\.\d+)\D*(\d+\.\d+)\D*(\d+\.\d+)\D*(\d+\.\d+)/;
        my @record =  ($1, $2, $3, $4);
        @data = (@data, @record)
    }
}
my %date_data;

$date_data{$date[$_]} = $data[$_] for (0..$#date);


my $tbzz= eval ((($date_data{"2007-09-30"} - $date_data{"2007-06-30"}) - ($date_data{"2006-09-30"} - $date_data{"2006-06-30"})) / ($date_data{"2006-09-30"} - $date_data{"2006-06-30"}));
if ($@) {
    warn "Something error: $@\n"
} else {
    print "tbzz is $tbzz\n";
}

}
文本范例如下:
【历年简要财务指标】                                       单位(元)
━━━━━━━━━━┯━━━━━┯━━━━━┯━━━━━┯━━━━━━
   指标\报告期   │2007-09-30│2007-06-30│2007-03-31│2006-12-31
──────────┼─────┼─────┼─────┼──────
 每股收益        │    0.0925│    0.0706│    0.0436│    0.1700
 每股收益扣除   │    0.0910│    0.0677│    0.0436│    0.1700
 每股净资产      │    5.5830│    5.5600│    5.6400│    5.4850
 调整后每股净资产  │         -│         -│         -│    5.2900
 净资产收益率(%)   │    1.6600│    1.2690│    0.7734│    3.1100
 每股资本公积金  │    3.0887│    3.0887│    3.0887│    3.0887
 每股未分配利润  │    0.2016│    0.1797│    0.2527│    0.2262
 营业收入(万)     │  849237.1│  561410.6│  336650.4│         -
 主营业务收入(万) │         -│         -│         -│ 1265615.1
 净利润(万)       │    5567.0│    4247.4│    2625.9│   10263.8
 营业利润(万)    │    6168.8│    4548.0│    2858.4│   11791.0
 主营业务利润(万) │         -│         -│         -│  213144.8
 投资收益(万)     │     365.1│       2.4│         -│     133.8
 审计意见     │         -│         -│         -│无保留意见
━━━━━━━━━━┷━━━━━┷━━━━━┷━━━━━┷━━━━━━
━━━━━━━━━━┯━━━━━┯━━━━━┯━━━━━┯━━━━━━
   指标\报告期   │2006-09-30│2006-06-30│2005-12-31│2004-12-31
──────────┼─────┼─────┼─────┼──────
 每股收益        │    0.0804│    0.0554│    0.1190│    0.2340
 每股收益扣除   │         -│    0.0600│    0.1070│    0.1700
 每股净资产      │    5.4000│    5.3900│    5.3340│    5.3060
 调整后每股净资产  │    5.2340│    5.1500│    5.0850│    5.1080
 净资产收益率(%)   │    1.4900│    1.0300│    2.2390│    4.4100
 每股资本公积金  │    3.0878│    3.0878│    3.0878│    3.0858
 每股未分配利润  │    0.1835│    0.1585│    0.1031│   -0.6242
 营业收入(万)     │         -│         -│         -│         -
 主营业务收入(万) │  855993.4│  553812.6│ 1145589.2│ 1336252.2
 净利润(万)       │    4837.2│    3336.8│    7189.9│   14072.7
 营业利润(万)    │    6066.2│    4208.5│    3264.9│   13362.7
 主营业务利润(万) │  147884.3│   97354.4│  188346.6│  196940.2
 投资收益(万)     │     -75.9│     -75.9│     723.7│    3668.9
 审计意见     │         -│         -│无保留意见│无保留意见
━━━━━━━━━━┷━━━━━┷━━━━━┷━━━━━┷━━━━━━
深康佳A最新净利润为5415.01万元,同比增加11.94%,每股收益为0.0925元,同比增加15.05%。

【资产负债简表】


然后提示还是除数为0,打印%date_data的内容和cobrawgl老师写的测试代码中的%date_data内容完全相同啊,但是老师的代码没错,我的就是提示除数为0,为什么呢?

附cobrawgl老师代码:
我用你给的文本文件写了个测试程序


#!/usr/bin/perl


use strict;
use warnings;

my @date;
my @data;

my $count = 0;  
while (<DATA>) {
    chomp;
    $count = 0 if $count == 18;
    $count += 1;

    if ($count == 2) {
        m/(\d+-\d+-\d+)\D*(\d+-\d+-\d+)\D*(\d+-\d+-\d+)\D*(\d+-\d+-\d+)/;
        my @record =  ($1, $2, $3, $4);
        @date = (@date, @record)
    }
    if ($count == 13) {
        m/(\d+\.\d+)\D*(\d+\.\d+)\D*(\d+\.\d+)\D*(\d+\.\d+)/;
        my @record =  ($1, $2, $3, $4);
        @data = (@data, @record)
    }
}

my %date_data;
$date_data{$date[$_]} = $data[$_] for (0..$#date);


my $tbzz= eval ((($date_data{"2007-09-30"} - $date_data{"2007-06-30"}) - ($date_data{"2006-09-30"} - $date_data{"2006-06-30"})) / ($date_data{"2006-09-30"} - $date_data{"2006-06-30"}));
if ($@) {
    warn "Something error: $@\n"
} else {
    print "tbzz is $tbzz\n";
}

__DATA__
━━━━━━━━━━┯━━━━━┯━━━━━┯━━━━━┯━━━━━━
   指标\报告期   │2007-09-30│2007-06-30│2007-03-31│2006-12-31
──────────┼─────┼─────┼─────┼──────
 每股收益        │    0.0925│    0.0706│    0.0436│    0.1700
 每股收益扣除   │    0.0910│    0.0677│    0.0436│    0.1700
 每股净资产      │    5.5830│    5.5600│    5.6400│    5.4850
 调整后每股净资产  │         -│         -│         -│    5.2900
 净资产收益率(%)   │    1.6600│    1.2690│    0.7734│    3.1100
 每股资本公积金  │    3.0887│    3.0887│    3.0887│    3.0887
 每股未分配利润  │    0.2016│    0.1797│    0.2527│    0.2262
 营业收入(万)     │  849237.1│  561410.6│  336650.4│         -
 主营业务收入(万) │         -│         -│         -│ 1265615.1
 净利润(万)       │    5567.0│    4247.4│    2625.9│   10263.8
 营业利润(万)    │    6168.8│    4548.0│    2858.4│   11791.0
 主营业务利润(万) │         -│         -│         -│  213144.8
 投资收益(万)     │     365.1│       2.4│         -│     133.8
 审计意见     │         -│         -│         -│无保留意见
━━━━━━━━━━┷━━━━━┷━━━━━┷━━━━━┷━━━━━━
━━━━━━━━━━┯━━━━━┯━━━━━┯━━━━━┯━━━━━━
   指标\报告期   │2006-09-30│2006-06-30│2005-12-31│2004-12-31
──────────┼─────┼─────┼─────┼──────
 每股收益        │    0.0804│    0.0554│    0.1190│    0.2340
 每股收益扣除   │         -│    0.0600│    0.1070│    0.1700
 每股净资产      │    5.4000│    5.3900│    5.3340│    5.3060
 调整后每股净资产  │    5.2340│    5.1500│    5.0850│    5.1080
 净资产收益率(%)   │    1.4900│    1.0300│    2.2390│    4.4100
 每股资本公积金  │    3.0878│    3.0878│    3.0878│    3.0858
 每股未分配利润  │    0.1835│    0.1585│    0.1031│   -0.6242
 营业收入(万)     │         -│         -│         -│         -
 主营业务收入(万) │  855993.4│  553812.6│ 1145589.2│ 1336252.2
 净利润(万)       │    4837.2│    3336.8│    7189.9│   14072.7
 营业利润(万)    │    6066.2│    4208.5│    3264.9│   13362.7
 主营业务利润(万) │  147884.3│   97354.4│  188346.6│  196940.2
 投资收益(万)     │     -75.9│     -75.9│     723.7│    3668.9
 审计意见     │         -│         -│无保留意见│无保留意见
━━━━━━━━━━┷━━━━━┷━━━━━┷━━━━━┷━━━━━━



>perl -w test.pl
tbzz is -0.120501199680085

自己能力有限,研究了几日还是不能解决,请老师帮忙,谢谢。
还有我想让@data里也能匹配到净利润为负数的情况,正则怎么改写好?

don't just post lots of codes, no one wants to read....
you should just point out your problem....
匹配負數 : 加一個 -?在前頭
另外除數為0的問題...你可以考慮分段debug...
先判斷讀進來的是不是都是數字......