我是Perl的新手,我需要从Perl中的DateTime对象中提取月,日和时间。
以下代码是我目前的代码:
use strict;
use DateTime::Format::Strptime;
my $parser = DateTime::Format::Strptime->new( pattern => "%Y-%m-%dT%H:%M:%SZ", time_zone => 'UTC',
on_error => 'croak');
my $date1 = $parser->parse_datetime("2017-10-10T04:21:56Z");
print STDERR "Year: $date1->year()";
我总是得到我的输出: 年份:2017-10-10T04:21:56->年()。
我做错了什么?或者我应该在双引号之外打印年份?
答案 0 :(得分:6)
问题是方法调用(或者实际上是任何子例程调用)不会在带引号的字符串中展开。你需要在这里使用连接:
print STDERR "Year: " . $date1->year();
或者将多个参数传递给print()
:
print STDERR "Year: ", $date1->year();
另请注意,print STDERR
通常拼写为warn(...)
。
更新:还值得指出这里实际发生了什么。当Perl在引用的字符串中看到$date1->year()
时,它会将$date1
识别为变量,并希望将其扩展为其值。受祝福的引用的值通常类似于" Class = HASH(0x012345679ABCDEF)" (其中" Class"是类名)。但DateTime会覆盖字符串化以显示日期和时间的字符串版本。