2

我在使用用 Perl 编写的 OAI-PMH 收集存储库时使用“from=>”和“until=>”。我试图让用户以<STDIN>yyyy-mm-dd 格式输入开始日期和结束日期。但是,编译器并没有将记录/结果还给我,而是似乎忽略了我的查询/请求,至少它没有给我任何结果。我在下面附上了代码的相关部分。谢谢你的帮助!

#! /usr/bin/perl

use warnings;
use strict;

use Net::OAI::Harvester;
use Time::Piece;
use Time::Seconds;

my $harvester = Net::OAI::Harvester->new( 
    baseURL => 'https://opus4.XXX/oai'
);

my $weekAgo = localtime() - ONE_WEEK;
$weekAgo = $weekAgo->ymd;

my $monthAgo = localtime() - ONE_MONTH;
$monthAgo = $monthAgo->ymd;

print "Please enter a number \n
        1 for last weeks records \n
        2 for last months records \n
        3 for records from ... until ...\n";
my $input = <STDIN>;

[...]
elsif( $input == 3 ) {
        print "enter start date (yyyy-mm-dd): ";
        my $from = <STDIN>;
        print "Enter final date (yyyy-mm-dd): ";
        my $until = <STDIN>;

        my $list = $harvester->listRecords(
            metadataPrefix  => 'oai_dc',
            from=>$from,
            until=>$until
        );

        search($list);
}

sub search {
    my $list = $_[0];
while ( my $record = $list->next ) { 
    my $datestamp = $record->header->datestamp;
    print "[ time stamp: ",$datestamp," ]","\n";
    my $metadata = $record->metadata;
    print "Title: ",$metadata->title,"\n";
    [...]}
}
4

1 回答 1

1

由于反馈而更改了答案

尝试chomp输入。它可能会混淆您将值传递到的模块。例如改变

    my $from = <STDIN>;

    chomp(my $from = <STDIN>);
于 2021-08-08T16:06:11.170 回答