2

我编写了一个 perl 脚本,我在其中调用一个子例程将字段插入到数据库表中。该子例程在除主 perl 文件 Test.pl 之外的另一个文件 Test.pm 中调用。在 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 

这是什么错误以及为什么会发生这种情况。如果我传递 of$date$timefrom的参数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;
}
4

3 回答 3

8

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

  1. 您正在调用localtimewhich 是一种方法并将当前时间作为字符串返回,例如 "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);

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

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 的输入。

于 2013-06-19T23:21:00.680 回答
5

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

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

于 2013-06-19T23:23:00.803 回答
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;
于 2013-06-19T23:19:39.870 回答