in reply to hanging at odd place, can still input but see nothing on screen (newbie)

Whew! I started to refactor this but ran into some things I couldn't translate. So I thought I would point out what I found and let you do the work. (Who knows, it might be homework.)

First off, you use the following block over and over. It screams for a subroutine:

$trans[int(rand($#trans + 1))]
At first I wrote this as a sub called pick:
sub pick { my $aref = shift; return $aref->[int(rand(scalar(@$aref)))]; }

Second, rather than having an array for each language element type, I would put this in a hash of arrays (HOA):

my %parts = ( det => [qw{the a ninety}], #determiner pro => [qw{it I ya theirs}], # pronoun properNoun => [qw{Alpesh Ann China Beijing}], # proper noun ...

That way you could access individual items with:

$parts{adj}->[1]

And combine this with the pick function I mentioned up above. To pick one word out of any part:

pick($parts{adj});

Next a couple of observations. In createNP I ran across a problem. You're using a global variable $randnum to hold a random number:

sub createNP{ my(@adjp); while ((my$counter = 0) < 100) { $randnum = int(rand(5)+1); if ($randnum == 1) { $randnum = int(rand(2)+1); if ($randnum == 1)

After looking at it, it looks right, but it would be better if you used a local variable to hold the random value that is used within a local scope. Also the problem with the while loop that was mentioned earlier.

sub createNP{ my(@adjp); my $counter = 0; while ($counter < 100) { my $outerRN = int(rand(5)+1); if ($outerRN == 1) { my $innerRN = int(rand(2)+1); if ($innerRN == 1)

Finally, I noticed that you are using an array to accumulate results:

$np[$counter] = $pluralNoun[int(rand($#pluralNoun + 1))];

This can be done without an index by using the push function.

push(@np , $pluralNoun[int(rand($#pluralNoun + 1))])

All I've got time for now. HIH.


"Look, Shiny Things!" is not a better business strategy than compatibility and reuse.