无法通过包找到对象方法“strftime”

时间:2013-06-19 23:11:06

标签: perl datetime

我编写了一个perl脚本,我调用子程序将字段插入数据库表。子例程在另一个文件Test.pm中调用,而不是主perl文件Test.pl. 在Test.pm中,我有以下字段要插入表

my $date = localtime->strftime('%Y-%m-%d %H:%M:%S');
my $time = localtime->strftime('%H:%M:%S');

但是,我收到以下错误

Can't locate object method "strftime" via package 

这是什么错误,为什么会这样?如果我从$date传递$timeTest.pl的参数,脚本运行正常,我该如何解决?

以下是子程序:

sub send_message
{
     my $date = localtime->strftime('%Y-%m-%d %H:%M:%S');
     my $time = localtime->strftime('%H:%M:%S');
     print "Date : $date Time : $time";
     my $sql1 = "Insert into testtable(time,date) values('$time','$date')";
     my $sth1 = $dbh->prepare($sql1);
        $sth1->execute
        or die "SQL Error: $DBI::errstr\n";
     return;
}

3 个答案:

答案 0 :(得分:7)

首先:错误意味着您的脚本想要调用方法strftime,该方法应在特殊包中定义。 查看脚本,会发生以下情况:

  1. 您正在调用localtime这是一种方法,并将当前时间作为字符串返回,例如"Thu Jun 20 01:14:01 2013"
  2. 您尝试使用strftime返回的名称调用包(模块)中定义的方法localtime。这不起作用。
  3. strftimePOSIX中定义,并采用> 1参数:格式和时间。 你可能想打电话:

    use POSIX;
    
    my $date = POSIX::strftime('%Y-%m-%d %H:%M:%S', localtime);
    my $time = POSIX::strftime('%H:%M:%S', localtime);
    

    或者,因为您正在调用此方法两次:

    use POSIX;
    
    my @localtime = localtime;
    my $date = POSIX::strftime('%Y-%m-%d %H:%M:%S', @localtime);
    my $time = POSIX::strftime('%H:%M:%S', @localtime);
    

    因为localtime返回一个数组,该数组应该是strftime的输入。

答案 1 :(得分:3)

关闭@Jim Garrison,但我认为这是一个缺失的use Time::Piece问题。

@Rudra - 尝试将其添加到脚本的顶部,看看它是否能完成这项工作。

答案 2 :(得分:0)

localtime是内置函数,strftimePOSIX包的一部分,因此您不使用->语法。最佳参考位于perldoc。例如

use POSIX qw(strftime);
$now_string = strftime "%a %b %e %H:%M:%S %Y", localtime;
# or for GMT formatted appropriately for your locale:
$now_string = strftime "%a %b %e %H:%M:%S %Y", gmtime;