0
use Net::Google::Calendar;
my $cal = Net::Google::Calendar->new;
$cal->login(...);

 my $c;
 for ($cal->get_calendars) {
    $c = $_ if ($_->title eq 'Custom');
 }
 $cal->set_calendar($c);

 for my $event ($cal->get_events) {
    print "<pre>" . $event->title . " ". Dumper($event->when) ." </pre>";
 }

标题可以正常返回,但我还需要日期,希望能按日期过滤掉我需要的事件(就像我处理该帐户的日历一样,我认为这个模块无论如何都不支持更高级的方式)。打印结果显示肯定有一些东西:

VAR1 = bless(
    {
        'local_rd_secs' => 0,
        'local_rd_days' => 734733,
        'rd_nanosecs'   => 0,
        'locale'        => bless(
            {
                'default_time_format_length' => 'medium',
                'native_territory'           => 'United States',
                'native_language'            => 'English',
                'native_complete_name'       => 'English United States',
                'en_language'                => 'English',
                'id'                         => 'en_US',
                'default_date_format_length' => 'medium',
                'en_complete_name'           => 'English United States',
                'en_territory'               => 'United States'
            },
            'DateTime::Locale::en_US'
        ),
        'local_c' => {
            'hour'           => 0,
            'second'         => 0,
            'month'          => 8,
            'quarter'        => 3,
            'day_of_year'    => 231,
            'day_of_quarter' => 49,
            'minute'         => 0,
            'day'            => 18,
            'day_of_week'    => 6,
            'year'           => 2012
        },
        'utc_rd_secs'     => 0,
        'formatter'       => undef,
        'tz'              => bless( { 'name' => 'UTC' }, 'DateTime::TimeZone::UTC' ),
        'utc_year'        => 2013,
        'utc_rd_days'     => 734733,
        'offset_modifier' => 0
    },
    'DateTime'
);

'DateTime' 是暗示性的,但$event->when->day根据 DateTime 给出 的,Can't call method "day" without a package or object reference我认为我在使用 Perl 时很愚蠢。如何使用返回的日期对象(或任何它),以便我可以直接读取日期和/或使其可读?

4

2 回答 2

4

我从未使用过该模块,但浏览它的文档时,我注意到

when [<start> <end> [allday]]

...

返回两个描述开始和结束的 DateTime 对象和一个标志,表明它是否是全天事件。

因此,您可以尝试类似( $event->when )[0]->day.

于 2012-08-22T14:25:46.550 回答
2

ref($event)显示事件的包是Net::Google::Calendar::Entry. 它的文档显示了这个问题:

when [<start> <end> [allday]]
...
    Returns two DateTime objects depicting the start and end and a flag
    noting whether it's an all day event.

当您将其传递给Data::Dumper两个DateTime对象时,将是Dumper的参数。to的第二个参数Dumper通常是一个数组引用,用作在输出中使用的变量名而不是$VAR1等,但由于结束日期undef Data::Dumper使用它的默认值。

$event->when->day显然,当您尝试调用day数组时,情况会有所不同。

于 2012-08-22T14:30:42.750 回答