Я передаю два 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);
Я проверил журнал ошибок сервера, не было жалоб, кроме ошибки программного обеспечения, отображаемой в браузере.