我将两个Date::Manip::Date
个对象,完全有效的日期传递给我的子:
sub get_duration {
my $duration;
my @val;
my $from = $_[0]->new_date();
my $to = $_[1]->new_date();
# $from->parse("2012-03-06");
# $to->parse("2012-03-07");
print $from . " ".$to. "<-- <br />";
my @f = $from->value();
if ($f[0] == 2012) {
$from->config("ConfigFile",$HOLIDAYS_2012);
} elsif ($f[0] == 2013) {
$from->config("ConfigFile",$HOLIDAYS_2013);
} elsif ($f[0] == 2014) {
$from->config("ConfigFile",$HOLIDAYS_2014);
} elsif ($f[0] == 2015) {
$from->config("ConfigFile",$HOLIDAYS_2015);
}
my @t = $to->value();
if ($t[0] == 2012) {
$to->config("ConfigFile",$HOLIDAYS_2012);
} elsif ($t[0] == 2013) {
$to->config("ConfigFile",$HOLIDAYS_2013);
} elsif ($t[0] == 2014) {
$to->config("ConfigFile",$HOLIDAYS_2014);
} elsif ($t[0] == 2015) {
$to->config("ConfigFile",$HOLIDAYS_2015);
}
print "from " . @f ." to ". @t."<br>";
my $delta = $from->calc($to, "business");
print $from->calc($to, "business") . " <-";
@val = $delta->value();
if ($to->is_business_day()) {
$duration = $val[3]+1;
} else {
$duration = $val[3];
}
return $duration;
}
我得到了输出
Date::Manip::Date=HASH(0xacdf7a0) Date::Manip::Date=HASH(0xacdfb50)<--
from 0 to 0
<-
Software error:
Can't call method "value" on an undefined value at '@val = $delta->value();'
这是两个日期都没有通过,我在尝试设置配置文件时没有错误,无论如何,值数组@t
和@f
都是空的,它会很快崩溃因为我试图获得三角洲。
但是,如果我取消注释这两行
$from->parse("2012-03-06");
$to->parse("2012-03-07");
(因此忽略参数) 它按预期工作得很好。
我怀疑在Perl中传递对象时我缺少什么?
首先
&get_overlap_duration($saved[$i][5], $saved[$i][6], $saved[$i][7], $saved[$i][8])
叫做
我打印了@saved值并且它们是正确的,它们是字符串:
2012-03-06, 2012-03-08, 2012-03-05, 2012-03-07
然后在get_overlap_duration
内,这些字符串是
my $from1 = new Date::Manip::Date;
my $to1 = new Date::Manip::Date;
my $from2 = new Date::Manip::Date;
my $to2 = new Date::Manip::Date;
$from1->parse($_[0]);
$to1->parse($_[1]);
$from2->parse($_[2]);
$to2->parse($_[3]);
然后有get_duration
号召唤$duration = get_duration($from2, $to1);
我已检查过服务器错误日志,除了浏览器中显示的软件错误外,没有任何投诉。
答案 0 :(得分:3)
问题在于以下一行:
my $delta = $from->calc($to, "business");
它没有返回有效的对象。这可能意味着calc()函数中的某些内容失败了。由于“业务”不是有效日期。如果您阅读Date :: Manip :: Calc手册页,mode
参数仅在您之前传入两个日期对象并且您只传递了一个时才合法。