我编写了一个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
传递$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;
}
答案 0 :(得分:7)
首先:错误意味着您的脚本想要调用方法strftime
,该方法应在特殊包中定义。
查看脚本,会发生以下情况:
localtime
这是一种方法,并将当前时间作为字符串返回,例如"Thu Jun 20 01:14:01 2013"
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的输入。
答案 1 :(得分:3)
关闭@Jim Garrison,但我认为这是一个缺失的use Time::Piece问题。
@Rudra - 尝试将其添加到脚本的顶部,看看它是否能完成这项工作。
答案 2 :(得分:0)
localtime
是内置函数,strftime
是POSIX
包的一部分,因此您不使用->
语法。最佳参考位于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;