我编写了一个 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
这是什么错误,为什么会发生。如果我从 Test.pl
传递参数 $date
和 $time
,脚本运行正常,我该如何解决这个问题?
下面是子程序:
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;
}
最佳答案
首先:这个错误意味着你的脚本想要调用方法strftime
,它应该在一个特殊的包中定义。
查看您的脚本,会发生以下情况:
- 您正在调用
localtime
,它是一个方法并以字符串形式返回当前时间,例如“2013 年 6 月 20 日星期四 01:14:01”
- 您尝试使用
localtime
返回的名称调用包(模块)中定义的方法strftime
。那行不通。
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 的输入。
关于perl - 无法通过包定位对象方法 "strftime",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17202853/