吐血求教:除数为零

我用你给的文本文件写了个测试程序


#!/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


老师,你的代码是对的,我想是不是我的正则和我赋值到散列的方式有问题,我再对着你的代码学习下。
还有问你个问题:$date_data{$date[$_]} = $data[$_] for (0..$#date); 里边的$#date,$#是什么特殊变量啊,$#date是什么意思呢?我查到的$#的意思是“$#                打印数字时默认的数字输出格式 ”。实在是看不懂,请指导好吗?

糊涂了,,是数组的最后一个元素的索引值。基本功不扎实,不好意思。