I'm no expert, but after reading perllocale it seems that checking the LANG environmetal variable might relevant to your issue... It is possible to override the language selection of a locale after the fact within many Unix systems. Sometimes I've seen an LC_LANG variable as well, or NLS_LANG (I think Oracle uses NLS_ variables for instance)
Might you examine your %ENV{} in the running Perl program and report back the LC_ variables? And anything that contains lang? These usually are locale related if my memory serves.
Here's some quick code that might work -- reply back with the output if your still 'bugged' by the sort order and I'll be happy to take a closer look. I know Spanish (Madrid, Spain) somewhat well and understand what your trying to achieve.
foreach my $env (keys %ENV){
if($env =~ /^LC_/i || $env =~ /lang/i){
print "$env => $ENV{$env}\n";
}
}
"Strictly speaking, there are no enlightened people, there is only enlightened activity." -- Shunryu Suzuki