$text was undefined at one point at which it was used, in sub main.
I think this fixes it. Replace:
my $romaji = plaque("@romaji");
my $hiragana = plaque(hiragana($text));
With:
my $text = "@romaji";
my $romaji = plaque($text);
my $hiragana = plaque(hiragana($text));
Also, since you invited comments/criticisms, I would rewrite your "pick a few" section as:
my @romaji = map { splice @syllables, int(rand @syllables), 1 } 1..25;
Other useful resources: Unicode Code page for Hiragana which I used (and I assume you did, too), along with charnames to simplify your %Hiragana generation:
my %Hiragana;
use charnames qw/hiragana/;
sub get_hiragana { chr charnames::vianame("HIRAGANA LETTER ".uc(shift)
+) }
# the standards
for my $initial ('', qw/k g s z t d n m h b p m r/) {
for my $final (qw/a i u e o/) {
my $syl = $initial.$final;
$Hiragana{$syl} = get_hiragana($syl);
}
}
# columns with missing entries (yi, ye, wu)
$Hiragana{$_} = get_hiragana($_) for qw/ya yu yo wa wi we wo n/;
# small letters
$Hiragana{"($_)"} = get_hiragana("small $_") for qw/a i u e o ya yu yo
+/;
# special cases
{
my @special = (qw/tsu tu shi si chi ti fu hu/,
map(('j'.$_ => 'z'.$_), qw/a i u e o/),
'(tsu)', 'small tu');
while (my ($syl, $uni) = splice @special, 0, 2) {
$Hiragana{$syl} = get_hiragana($uni);
}
}
delete $Hiragana{$_} for qw/tu si ti/; # delete Unicode-y names for ts
+u, shi, and chi
Very cool use of Perl. Brings me back to my Nihongo days...
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.