chevron-left chevron-right

[PERL] obliczanie różnicy między datami

Napisz skrypt w języku Perl zawierający dwie tablice przechowujące odpowiednio nazwy miesięcy i ilości dni w miesiącach. Kod skryptu ma wczytać z klawiatury dwie daty w postaci :

nazwa miesiąca słownie oraz numer dnia numerycznie

a następnie obliczyć liczbę dni dzielących obie daty i wypisać wynik.

#!/usr/bin/perl
use warnings;
 
@miesiace = (   "styczen",
                "luty",
                "marzec",
                "kwiecien",
                "maj",
                "czerwiec",
                "lipiec",
                "sierpien",
                "wrzesien",
                "pazdziernik",
                "listopad",
                "grudzien"      );
 
@dni = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
 
print "Wszystkie miesiące należy podawać słownie, używając tylko małych liter bez polskich znaków.n";
 
print "Podaj pierszą datę (miesiąc dzień): ";
$d1 = <STDIN>;
 
print "Podaj drugą datę (miesiąc dzień): ";
$d2 = <STDIN>;
 
($m1, $d1) =  split(/W/, $d1, 2);
($m2, $d2) =  split(/W/, $d2, 2);
 
if($m1 eq "" || $m2 eq "")
{
  print "Nie podano nazw miesięcy!n";
  exit;
}
if($d1 eq "" || $d2 eq "")
{
  print "Nie podano liczby dni!n";
  exit
}
 
for($i = 0; $i < 12; $i++)
{
  if($miesiace[$i] eq $m1)
  {
    $nr_m1 = $i;
  }
 
  if($miesiace[$i] eq $m2)
  {
    $nr_m2 = $i;
  }
}
 
if(!defined($nr_m1))
{
  print "Nie znaleziono miesiąca $m1!n";
  exit;
}
if(!defined($nr_m2))
{
  print "Nie znaleziono miesiąca $m2!n";
  exit;
}
 
if($d1 > $dni[$nr_m1] || $d1 < 1)
{
  print "Miesiąc $m1 nie ma $d1 dni!n";
  exit;
}
if($d2 > $dni[$nr_m2] || $d2 < 1)
{
  print "Miesiąc $m2 nie ma $d2 dni!n";
  exit;
}
 
if($nr_m1 == $nr_m2)
{
  if($d1 > $d2)
  {
    $suma = $d1 - $d2;
  }
  else
  {
    $suma = $d2 - $d1;
  }
}
else
{
  if($nr_m1 > $nr_m2)
  {
    $tmp_m = $nr_m1;
    $nr_m1 = $nr_m2;
    $nr_m2 = $tmp_m;
 
    $tmp_d = $d1;
    $d1 = $d2;
    $d2 = $tmp_d;
  }
 
  for($i = ($nr_m1 + 1); $i < $nr_m2; $i++)
  {
    $suma += $dni[$i];
  }
 
  $suma += ($dni[$nr_m1] - $d1) + $d2;
}
 
print "Różnica dni wynosi: $suma";