使用Date :: Manip对象的神秘perl未定义值

时间:2012-02-10 13:52:00

标签: perl date

我有这个子Formatting Date::Manip's Delta to days 在我使用答案的帮助后,它完美地工作。今天我再次运行我的代码,Can't call method "value" on an undefined value at@val = $delta->value();

sub calc_usage {

    my $date_from;
    my $date_to;
    my $delta = new Date::Manip::Delta;
    my $period = 0;
    my $i;
    my @val;

    for $i (0 .. $#DATE_HOLDER_USAGE) {
        $date_from = new Date::Manip::Date;
        $date_to = new Date::Manip::Date;

        $date_from->parse($DATE_HOLDER_USAGE[$i][0]);
        $date_to->parse($DATE_HOLDER_USAGE[$i][1]);

        $delta = $date_from->calc($date_to, "business");
        @val = $delta->value();

        my @year_from = $date_from->value();
        my @year_to = $date_to->value();

        if ($date_to->is_business_day()) {
            $period += $val[3]+1;
        } else {
            $period += $val[3]
        }
    }

    $YEARLY_ALLOC_HTML = $period;
}

我不知道为什么会这样。

我填写@DATE_HOLDER_USAGE后调用该函数,我有导入

use Date::Manip::Date;
use Date::Manip::Delta;
use Date::Manip;

(可能不是所有这些都必要吗?)

1 个答案:

答案 0 :(得分:0)

小学生错误,我有一个新的条件限制了@DATE_HOLDER_USAGE的填充 制动代码,有效地将非日期元素提供给日期解析器,不会从中获取任何值。

回复M42的评论

my @dates;
$dates[0] = $DATE_FROM;
$dates[1] = $DATE_TO;
$DATE_HOLDER_USAGE[$inc] = [@dates];
$inc++;

2012-12-28  2013-01-02
2012-06-18  2012-06-29
2012-02-16  2012-02-21

但是在某些情况下,我认为在持有者的某些地方根本不会有$ dates [0]和$ dates [1]。