perl - 无法通过包定位对象方法 "strftime"

标签 perl datetime

我编写了一个 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,它应该在一个特殊的包中定义。 查看您的脚本,会发生以下情况:

  1. 您正在调用 localtime,它是一个方法并以字符串形式返回当前时间,例如“2013 年 6 月 20 日星期四 01:14:01”
  2. 您尝试使用 localtime 返回的名称调用包(模块)中定义的方法 strftime。那行不通。

strftimePOSIX 中定义并采用 >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/

相关文章:

vb.net - 使用VB.NET查找一周中的星期一日期

python - python 2.4 中的日期时间命令行参数

MySQL 从小时 :minute format 获取日期

perl - 在 Perl 中读取和打印文本文件

unpack 结合 Perl 中的 join 的性能

php - MYSQL 选择日期范围内的最大计数

perl - 如何将 DateTime 对象转换为 HTTP 格式?

字符串匹配

perl - 如何在不丢失颜色的情况下从 Perl 中的终端进行管道传输?

perl - 安装后测试perl