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 }