我编写了一个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)
第一:错误意味着您的脚本想要调用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);
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输入的数组.