You're using one of my pet-peeve style errors:
sub random_alignment {
my $type = shift;
if ($type eq 'parts') {
return $parts[rand @parts];
}
elsif ($type eq 'good_vs_evil') {
return $good_vs_evil[rand @good_vs_evil];
}
elsif ($type eq 'lawful_vs_chaotic') {
return $lawful_vs_chaotic[rand @lawful_vs_chaotic];
}
After a return there can never be an else. the sub returns, so this much better reads like this:
sub random_alignment
{
my $type = shift;
if ($type eq 'parts') {
return $parts[rand @parts];
}
if ($type eq 'good_vs_evil') {
return $good_vs_evil[rand @good_vs_evil];
}
if ($type eq 'lawful_vs_chaotic') {
return $lawful_vs_chaotic[rand @lawful_vs_chaotic];
}
And personally, I'd go even further:
sub random_alignment
{
my $type = shift;
$type eq "parts" and return $parts[rand @parts];
$type eq "good_vs_evil" and return $good_vs_evil[rand @good_vs_
+evil];
$type eq "lawful_vs_chaotic" and return $lawful_vs_chaotic[rand @law
+ful_vs_chaotic];
Clean, short code. Beautiful, right?
Enjoy, Have FUN! H.Merijn