【问题标题】:Harvesting repository // "From=>" and "Until=>" with user input variable使用用户输入变量获取存储库 //“From=>”和“Until=>”
【发布时间】:2021-08-08 15:43:43
【问题描述】:

我在使用用 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";
    [...]}
}

【问题讨论】:

    标签: date perl user-input stdin oai-pmh


    【解决方案1】:

    由于反馈而改变了答案

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

        my $from = <STDIN>;
    

        chomp(my $from = <STDIN>);
    

    【讨论】:

    • 哦,抱歉,全局变量是我想删除的东西,它来自另一次尝试……但我现在将全局变量设为本地(参见上面编辑过的代码),但它仍然不起作用。跨度>
    • 那么你可以试试我在 2 小时前给出的建议,然后把你的 STDIN 输入切掉。也许这会有所帮助。
    • 我会改变我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 1970-01-01
    • 2019-06-11
    相关资源
    最近更新 更多