Hi
my first hints:
a) use 'use strict;' to protect yourself. Yes, this advice is annoying but helpful.
b) The script gives warnings on runtime: Follow them.
c) The line
for ($j = 1; $j <= 20;$j++) is IMHO wrong as a perl array is accessed with index starting with 0, so
for ($j = 0; $j < 20;$j++).
d) Why do you use an external program to generate random numbers? See perldoc -f rand.
e) Don't initialize the random numer generator before every rand().
f) Your code to instantiate the %nuc-hash is in a way that you get an array of strings. Afterwards you convert them implicitly to float numbers. So instantiate them acordingly.
%nuc = (
'F' => [0.001, 0.001, ...],
...
)
g) Instead of programming this "ugly" if-elsif-else-statement at the end use a mapping-hash.
It's better readable, it's better maintainable and it's less error prone.
my %mapping = (
1 => "A",
2 => "R",
3 => "N",
...
);
if(exists $mapping{$names[$j]}) {
$names[$j] = $mapping{$names[$j]};
}
else {
# Default value (last else-Statement)
$names[$j]="V";
}