sub _mapone { my ($code, $counter)= @_; my $list= (($counter&1) == 0) ? \@two_syllable_words : \@three_syllable_words; my $result= $$list[$code]; die unless defined $result; # internal error -- can't happen. return $result; } sub list { my $x= shift; # delete leading zeros $x =~ s/^\0+//; my $counter= 0; return map { _mapone ($_, $counter++) } (unpack ("C*", $x)); }