Stringer has asked for the wisdom of the Perl Monks concerning the following question:
1) The hash is defined within a subroutine
2) The list assigned to the hash contains a duplicate key
3) The hash is returned out of the subroutine without 'return'.
The following code demonstrates this. The first hash contains all ten keys (one is duplicated) while the second contains only eight keys.
If you remove the duplicate key (B), or explicitly 'return %subhash' the problem will not occur. Normally I use explicit returns all the time, but I stumbled across this and thought it was odd.#!/usr/bin/perl use strict; use warnings; my %hash = ( "A" => 1, "B" => 1, "C" => 1, "D" => 1, "E" => 1, "B" => 1, "F" => 1, "G" => 1, "H" => 1, "I" => 1, "J" => 1, ); for my $key (sort(keys(%hash))) { print "$key\n"; } my %hash2 = makesubhash(); print "_"x10,"\n"; for my $key (sort(keys(%hash2))) { print "$key\n"; } sub makesubhash { my %subhash = ( "A" => 1, "B" => 1, "C" => 1, "D" => 1, "E" => 1, "B" => 1, "F" => 1, "G" => 1, "H" => 1, "I" => 1, "J" => 1, ); }
Is there a good reason for this behavior? Have I stumbled across a bug in perl?
EDIT: I'm using perl version 5.8.5. I've removed the DateTime module from the code; didn't mean to include it. The output looks like this:
A B C D E F G H I J __________ B C D E F G H I
|
|---|