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 }