无法通过包找到对象方法"strftime"

Rud*_*dra 1 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');
Run Code Online (Sandbox Code Playgroud)

但是,在这里我得到以下错误

Can't locate object method "strftime" via package 
Run Code Online (Sandbox Code Playgroud)

这是什么错误,为什么会发生这种错误.如果我传递$date$time来自的参数Test.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;
}
Run Code Online (Sandbox Code Playgroud)

Kar*_* S. 7

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

  1. 你正在调用localtime哪个方法并将当前时间作为字符串返回,例如 "Thu Jun 20 01:14:01 2013"
  2. 您尝试strftime使用返回的名称调用包(模块)中定义的方法localtime.这不起作用.

strftime定义在POSIX并且取> 1个参数:格式和时间.你可能想打电话:

use POSIX;

my $date = POSIX::strftime('%Y-%m-%d %H:%M:%S', localtime);
my $time = POSIX::strftime('%H:%M:%S', localtime);
Run Code Online (Sandbox Code Playgroud)

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

use POSIX;

my @localtime = localtime;
my $date = POSIX::strftime('%Y-%m-%d %H:%M:%S', @localtime);
my $time = POSIX::strftime('%H:%M:%S', @localtime);
Run Code Online (Sandbox Code Playgroud)

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


Ric*_*ton 5

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

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