time_t.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 our $Char = q{B};    ##Default because BILL'o'Clock is what I want
  12 my $arg = shift @ARGV;
  13 $Char = $arg if defined $arg and $arg =~ m{ \A \w{1} \Z }xsmi;
  14 our $IsUC = $Char =~ /[A-Z]/ ? 1 : 0;
  15 
  16 our %Time_of;
  17 
  18 sub bytes_to_nums {
  19     my $string = shift;
  20     ## Probably has problems if given more than 4 chars?
  21     my $long = unpack( "N*", pack( "a*", $string ) );
  22     return $long;
  23 }
  24 
  25 sub keep_it {
  26     my $time_in = shift
  27       or die "keep_it requires arg";
  28 
  29     our %Time_of;
  30 
  31     my ( $Baaa, $BAAA ) = ( $time_in, ( $IsUC ? uc $time_in : lc $time_in ) );
  32     $Baaa =~ s/^$Char/$Char/i;    ## Force capital
  33 
  34     my $timet = bytes_to_nums($Baaa);
  35     $Time_of{$Baaa} = $timet;
  36 
  37     if ( $Baaa ne $BAAA ) {
  38         $timet = bytes_to_nums($BAAA);
  39         $Time_of{$BAAA} = $timet;
  40     }
  41 }
  42 
  43 ## Friends ##
  44 keep_it("Boyd") if $Char eq q{B};
  45 keep_it("Byrd") if $Char eq q{B};    # is in Larry,Jim,Henry
  46 
  47 ### @TBD -- we could optionally use other dictionaries
  48 open my $DICT, '<', '/usr/dict/words'
  49   or die "Dict open fails $OS_ERROR";
  50 
  51 while (<$DICT>) {
  52     chomp;
  53     next unless m{ \A $Char \w{3} \Z }xism;    ## B... only
  54     keep_it($_);
  55 }
  56 
  57 for my $word ( sort keys %Time_of ) {
  58     my $timet = $Time_of{$word};
  59     my ( $gmt, $localt ) = ( scalar gmtime $timet, scalar localtime $timet );
  60     print qq{$word  $gmt GMT . $localt ET};
  61 }