time_t2.pl


   1 #! /usr/bin/env perl -l
   2 ### Copyright - 2005 William Ricker / N1VUX
   3 ### License - Same as Perl
   4 ### Purpose - Find Words that are time_t's or vice versa
   5 
   6 use warnings;
   7 use strict;
   8 use English qw{-no-match-vars};
   9 
  10 ## ARGS
  11 # defaults
  12 our %Time_of;
  13 our $Char;    ##Default because BILL'o'Clock is what I want
  14 my $show_while_keeping = 1;
  15 
  16 if ( $ARGV[0] =~ m{ --sort | -s }ixism ) {
  17     shift @ARGV;
  18     $show_while_keeping = 0;
  19 }
  20 
  21 our $IsUC;
  22 
  23 while ( @ARGV and $ARGV[0] =~ m{ \A \w{4} \Z }xism ) {
  24     my $arg = shift @ARGV;
  25     $IsUC = 1;
  26     keep_it($arg);
  27 
  28     # OR @TBD - while @ARG ?
  29 }
  30 if ( keys %Time_of ) {    # did we loop?
  31 
  32     exit if $show_while_keeping;
  33 
  34     for my $word ( sort keys %Time_of ) {
  35         show($word) unless $show_while_keeping;
  36     }
  37     exit;
  38 }
  39 
  40 my $arg = shift @ARGV;
  41 $Char = $arg if defined $arg and $arg =~ m{ \A \w{1} \Z }xsmi;
  42 
  43 # $Char ||= q{B}; ## BILL O'Clock my favorite ...
  44 $IsUC = $Char =~ /[A-Z]/ ? 1 : 0;
  45 
  46 sub bytes_to_nums {
  47     my $string = shift;
  48     ## Probably has problems if given more than 4 chars?
  49     my $long = unpack( "N*", pack( "a*", $string ) );
  50     return $long;
  51 }
  52 
  53 sub keep_it {
  54     my $time_in = shift
  55       or die "keep_it requires arg";
  56 
  57     our %Time_of;
  58 
  59     my ( $Baaa, $BAAA ) = ( $time_in, ( $IsUC ? uc $time_in : lc $time_in ) );
  60     $Baaa =~ s/^(.)/uc $1/ie;    ## Force capital, aaaa isn't until 2021.
  61 
  62     my $timet = bytes_to_nums($Baaa);
  63     $Time_of{$Baaa} = $timet;
  64     show($Baaa) if $show_while_keeping;
  65 
  66     if ( $Baaa ne $BAAA ) {
  67         $timet = bytes_to_nums($BAAA);
  68         $Time_of{$BAAA} = $timet;
  69         show($BAAA) if $show_while_keeping;
  70     }
  71 }
  72 
  73 ## Friends ##
  74 keep_it("Boyd") if $Char eq q{B};
  75 keep_it("Byrd") if $Char eq q{B};    # is in Larry,Jim,Henry
  76 keep_it("Holt") if $Char eq q{H};
  77 keep_it("IIRC") if $Char eq q{I};
  78 keep_it("Iirc") if $Char eq q{I};
  79 
  80 ### @TBD -- we could optionally use other dictionaries
  81 open my $DICT, '<', '/usr/share/dict/words'
  82   or die "Dict open fails $OS_ERROR";
  83 
  84 while (<$DICT>) {
  85     chomp;
  86     next unless m{ \A $Char \w{3} \Z }xism;    ## B... only
  87     keep_it($_);
  88 }
  89 
  90 exit if $show_while_keeping;
  91 
  92 for my $word ( sort keys %Time_of ) {
  93     show($word) unless $show_while_keeping;
  94 }
  95 
  96 sub show {
  97     my $word  = shift;
  98     my $timet = $Time_of{$word};
  99 
 100     my ( $gmt, $localt ) = ( scalar gmtime $timet, scalar localtime $timet );
 101     print qq{$word  $gmt GMT . $localt ET}
 102 
 103 }