http://qs321.pair.com?node_id=1142184

Random_Walk has asked for the wisdom of the Perl Monks concerning the following question:

Good $localtime fellow monks

I have a large piece of code, and while debugging, the output routine is giving me the above message, lots. I am passing it an array of hasrefs (alerts basicaly), and trying to sort by the msg value in the hashrefs. I have distilled the problem to a one-liner. TBH, I expected the problem to drop out elsewhere in my code, surprised I see it in this:

perl -wle '@r=({k=>"r"},{k=>"s"},{k=>"t"});print $_->{k} for sort { $_ +->{k} cmp $_->{k} } @r' Use of uninitialized value in string comparison (cmp) at -e line 1. Use of uninitialized value in string comparison (cmp) at -e line 1. Use of uninitialized value in string comparison (cmp) at -e line 1. Use of uninitialized value in string comparison (cmp) at -e line 1. Use of uninitialized value in string comparison (cmp) at -e line 1. Use of uninitialized value in string comparison (cmp) at -e line 1. r s t

I get the same result if I deref it this way to:

perl -wle '@r=({k=>"r"},{k=>"s"},{k=>"t"});print $_->{k} for sort { $$_{k} cmp $$_{k} } @r'

Why does this happen, where is it finding unitialised values? and of course, how can I fix it?

Cheers,
R.

Pereant, qui ante nos nostra dixerunt!