Perl Запрос сравнения даты - PullRequest
       12

Perl Запрос сравнения даты

1 голос
/ 07 февраля 2020

Я пытаюсь вывести «не в порядке», если дата, указанная во входном файле, превышает один день по сравнению с «сегодняшним днем», используя Perl версия 5.8.8.

Инициализация с помощью «./ code. sh

07/02/2020 08/02/2020

Когда я повторяю sh приведенный ниже код, чтобы использовать" сегодняшнюю дату "в качестве переменная, и только одна дата во входном файле, я получаю следующую ошибку:

Use of uninitialized value in concatenation (.) or string at code.sh line 27, <> line 1

Рабочий код (с двумя датами во входном файле):

#!/usr/bin/perl

use strict;
use warnings;

use Time::Piece;

#my $date = localtime->strftime('%d/%m/%Y');
#print "$date";

my $format = '%d/%m/%Y';

while (<>) {
   chomp;

         my ($str1, $str2) = split;
#        my ($date, $str2) = split;

#  my $dt1 = Time::Piece->strptime($date, $format);
   my $dt1 = Time::Piece->strptime($str1, $format);
   my $dt2 = Time::Piece->strptime($str2, $format);

   #  print "$date / $str2 ";
  print "$str1 / $str2 ";

     if ($dt2->julian_day - $dt1->julian_day ==1) {

         print "ok\n";

     } else {
         print "not ok\n";
         }
}

Сломанный код ( с одной датой во входном файле):

#!/usr/bin/perl

use strict;
use warnings;

use Time::Piece;

my $date = localtime->strftime('%d/%m/%Y');
print "$date";

my $format = '%d/%m/%Y';

while (<>) {
   chomp;

#        my ($str1, $str2) = split;
         my ($date, $str2) = split;

   my $dt1 = Time::Piece->strptime($date, $format);
#  my $dt1 = Time::Piece->strptime($str1, $format);
   my $dt2 = Time::Piece->strptime($str2, $format);

     print "$date / $str2 ";
 # print "$str1 / $str2 ";

     if ($dt2->julian_day - $dt1->julian_day ==1) {

         print "ok\n";

     } else {
         print "not ok\n";
         }
}

Не совсем уверен, что я делаю неправильно ...

Любая помощь приветствуется

1 Ответ

1 голос
/ 08 февраля 2020

Пожалуйста, обратите больше внимания, когда вы набираете код, в вашем примере было несколько ошибок типа

#!/usr/bin/perl
#
# vim: ai:ts=4:sw=4
#

use strict;
use warnings;
use feature 'say';

use Time::Piece;

my $format = '%d/%m/%Y';
my $date   = localtime->strftime($format);

say "Today is: $date\n";

my @str_dates = <DATA>;

chomp(@str_dates);

my $date1 = Time::Piece->strptime($str_dates[0], $format);
my $date2 = Time::Piece->strptime($str_dates[1], $format);

my $days_diff = $date2->julian_day - $date1->julian_day;

my $msg = ($days_diff == 1) ? "ok" :"not ok";

say "$date2 :: $date1 => $msg";
say "$date2 :: $date1 =  $days_diff day(s) apart";

__DATA__
07/02/2020
08/02/2020

Вывод

Today is: 07/02/2020

Sat Feb  8 00:00:00 2020 :: Fri Feb  7 00:00:00 2020 => ok
Sat Feb  8 00:00:00 2020 :: Fri Feb  7 00:00:00 2020 =  1 day(s) apart

ПРИМЕЧАНИЕ. Я бы порекомендовал, если вы используете:

vim лучше использовать с опциями : синтаксис включен, ai, ts = 4, sw = 4

...