chomp $line;
my $nuline =~ tr/a-zA-Z/n-za-mN-ZA-M/;
It doesn't work like that. That is, you're expecting:
- tr to act on $line, this is the weakest point, since there's nothing connecting them;
- the transliterated string to be put in $nuline, which also doesn't make since you don't have an assignment to it, and even if you had, then it would assign the return value of tr which is not the transliterated string;
Instead you
- assign to $line;
- apply tr to a freshly created $nuline, which is also undefined.
So that, BTW, if you were under warnings as you should, you would have get one.
The solution is to
my $nuline = $line;
$nuline =~ tr/a-zA-Z/n-za-mN-ZA-M/;
which can be shortened to
(my $nuline = $line) =~ tr/a-zA-Z/n-za-mN-ZA-M/;