Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl sub不';我不想使用传递的对象作为参数_Perl_Oop_Date - Fatal编程技术网

Perl sub不';我不想使用传递的对象作为参数

Perl sub不';我不想使用传递的对象作为参数,perl,oop,date,Perl,Oop,Date,我将两个完全有效的日期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-0

我将两个完全有效的日期
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;
    }
(因此忽略参数) 它工作正常

我怀疑在Perl中传递对象时我缺少了一些东西

首先
获取重叠持续时间($saved[$i][5]、$saved[$i][6]、$saved[$i][7]、$saved[$i][8])
被称为 我已经打印了@saved值,它们是正确的,它们是字符串:
2012-03-062012-03-082012-03-052012-03-07

然后在
get\u overlap\u 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($2,$to1)


我已经检查了服务器错误日志,除了浏览器中显示的软件错误外,没有其他投诉。

问题在于以下几行:

        my $delta = $from->calc($to, "business");

它没有返回有效的对象。这可能意味着calc()函数中的某些内容失败。因为“业务”不是有效日期。如果您阅读Date::Manip::Calc手册页,则只有在您在此之前传入两个日期对象且仅传入一个日期对象时,
模式
参数才是合法的。

问题在于,在以下行:

        my $delta = $from->calc($to, "business");

它没有返回有效的对象。这可能意味着calc()函数中的某些内容失败。因为“业务”不是有效日期。如果您阅读Date::Manip::Calc手册页,
模式
参数仅在您在此之前传入两个日期对象且仅传入一个日期对象时才合法。

您如何调用该函数?是,现在双击并添加了解释您如何调用该函数?是,现在双击并添加了解释不能是我在另一个子系统中使用类似的代码来计算“已使用”两个日期之间的工作日$
delta=$date\u from->calc($date\u to,“业务”)
@val=$delta->value()
如果($date\u to->is\u business\u day()){$period+=$val[3]
等等,在文档中我看不到两个日期对象的传递位置,只有$subtract,我不需要它,它也是可选的“business”是。如果我将日期作为简单字符串传递,则get_duration子系统会按预期工作,并且在开始时将其更改为:
my$from=new Date::Manip::Date;
my$to=new Date::Manip::Date;
$from->parse($[0]);
$to->parse($[1]);
可能值得在perl调试器中运行脚本(使用
perl-d
)运行它,因为问题仍然如前所述:calc函数没有返回您希望它返回的内容(有效的对象引用)。如果运行它,调试器可以进入calc()函数并根据您的输入查看它从何处返回以及失败的原因。不可能是我在不同的子系统中使用类似的代码来计算两个日期之间的“已用”工作日$
delta=$date\u from->calc($date\u to,“business”);
@val=$delta->value()
如果($date\u to->is\u business\u day()){$period+=$val[3]
etc在文档中,我看不到两个日期对象的传递位置,只有$subtract,我不需要它,它也是可选的“business”是。如果我将日期作为简单字符串传递,则get_duration子系统会按预期工作,并且在开始时将其更改为:
my$from=new Date::Manip::Date;
my$to=new Date::Manip::Date;
$from->parse($[0]);
$to->parse($[1]);
可能值得在perl调试器中运行脚本(使用
perl-d
)运行它,因为问题仍然如前所述:calc函数没有返回您希望它返回的内容(有效的对象引用)。如果运行调试器,您可以进入calc()函数,根据输入查看它从何处返回以及失败的原因。
        my $delta = $from->calc($to, "business");