#!/usr/local/bin/perl -w

# Check the shebang line and then just call this script from your .profile

use strict;
use DateTime;
use Text::Wrap;

$Text::Wrap::columns = 80; # or whatever your console likes
# or else, read recipe 1.17 from Perl Cookbook (2d ed)

my $dg = DateTime->now;
print "\nGregorian calendar\n";
print $dg->iso8601, $dg->strftime(", %A %d %B %Y%n");
print "JD : ", $dg->jd, " MJD : ", $dg->mjd, "\n";

eval 'use DateTime::Calendar::Julian';
unless ($@)
  {
    my $d = DateTime::Calendar::Julian->now;
    print "\nJulian calendar\n";
    print $d->iso8601, $d->strftime(", %A %d %B %Y%n");
  }

eval 'use DateTime::Calendar::Mayan';
unless ($@)
  {
    my $d = DateTime::Calendar::Mayan->now;
    print "\nMayan calendar\n";
    print $d->bktuk, " (baktun, katun, tun, uinal, kin)\n";
  }

eval 'use DateTime::Calendar::FrenchRevolutionary';
unless ($@)
  {
    my $dr = DateTime::Calendar::FrenchRevolutionary->now;
    print "\nFrench Revolution\n";
    print $dr->iso8601, $dr->strftime(", %A %d %B %EY, %Ej%n"); # in French
    (my $text = fill('', '', $dr->on_date('en'))) =~ s/\n\n+/\n/g;
    print $text;                                                # in English
  }

eval 'use DateTime::Calendar::Pataphysical';
unless ($@)
  {
    my $d = DateTime::Calendar::Pataphysical->now;
    print "\n'Pataphysique\n";
    print $d->ymd, $d->strftime(", %A %d %B %Y %*%n");
  }

eval 'use Date::Roman';
unless ($@)
  {
    my $date = Date::Roman->new();
    print "Roman: ", $date->as_string(), "\n";
  }

eval 'use Date::Discordian';
unless ($@)
  {
    print discordian(time()), "\n";
  }

eval 'use Date::Tolkien::Shire';
unless ($@)
  {
    my $shiredate = Date::Tolkien::Shire->new(time); 
    print "Today is ", $shiredate->on_date, "\n";
  }
