Сбор репозитория // "От=>" и "До=>" с пользовательской переменной ввода

avatar
Pedro
8 августа 2021 в 15:43
47
1
2

Я использую «from=>» и «until=>» при сборе данных из репозитория с помощью OAI-PMH, написанного на Perl. Я попытался позволить пользователю ввести дату начала и окончания с <STDIN> в формате гггг-мм-дд. Но вместо того, чтобы вернуть мне записи/результаты, компилятор, похоже, игнорирует мой запрос/запрос, по крайней мере, он не дает мне никаких результатов. Я приложил соответствующие части кода ниже. Спасибо за помощь!

#! /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";
    [...]}
}
Источник

Ответы (1)

avatar
TLP
8 августа 2021 в 16:06
1

Ответ изменен в связи с отзывом

Попробуйте chompввести свои данные. Это может сбить с толку модуль, которому вы передаете значения. Например. изменить

    my $from = <STDIN>;

до

    chomp(my $from = <STDIN>);
Pedro
8 августа 2021 в 18:00
0

О, извините, я хотел удалить глобальную переменную, она пришла из другой попытки ... но теперь я сделал глобальные переменные локальными (см. Отредактированный код выше), и это все еще не работает.

TLP
8 августа 2021 в 18:04
0

Тогда вы можете воспользоваться советом, который я дал 2 часа назад, и использовать ввод STDIN. Может быть, это поможет.

TLP
8 августа 2021 в 18:15
0

Я изменю свой ответ.