From f125e1ec13d2f7a6478d2cdffd23e0fafcdf46b0 Mon Sep 17 00:00:00 2001 From: jluehrs2 Date: Thu, 31 Jan 2008 16:31:52 -0500 Subject: add a caching option to random_word and is_word --- lib/Games/Word.pm | 42 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/lib/Games/Word.pm b/lib/Games/Word.pm index 88d3d56..9ec9403 100644 --- a/lib/Games/Word.pm +++ b/lib/Games/Word.pm @@ -11,12 +11,36 @@ use Math::Combinatorics qw/factorial/; use Test::Deep::NoTest; my $word_list = ''; +my $cache = 1; +my %words = (); +my @words = (); sub set_word_list { $word_list = shift; + die "Can't read word list: $word_list" unless -r $word_list; + die "Empty word list: $word_list" unless -s $word_list; + my %args = (cache => 1, @_); + if ($args{cache}) { + open my $fh, $word_list or die "Opening $word_list failed"; + for (<$fh>) { + chomp; + $words{$_} = 1; + } + @words = keys %words; + $cache = 1; + } + else { + $cache = 0; + } + } -sub random_word { +sub _random_word_cache { + die "No words in word list" unless keys %words; + return $words[int(rand(@words))]; +} + +sub _random_word_nocache { my $word; open my $fh, '<', $word_list or die "Opening $word_list failed"; @@ -28,7 +52,16 @@ sub random_word { return $word; } -sub is_word { +sub random_word { + return _random_word_cache if $cache; + return _random_word_nocache; +} + +sub _is_word_cache { + return $words{$_[0]}; +} + +sub _is_word_nocache { my $word = shift; open my $fh, '<', $word_list @@ -41,6 +74,11 @@ sub is_word { return 0; } +sub is_word { + return _is_word_cache(@_) if $cache; + return _is_word_nocache(@_); +} + sub random_permutation { my $word = shift; return '' if $word eq ''; -- cgit v1.2.3-54-g00ecf