hi list,
I know this is OT but i don't know what list i should ask this on so i
give it a shot here. If you're very annoyed with this mail me private
with a list should use.
I'm trying to use eval () with a constants module and it works very
funny, can anyone explain this behavior to me:
i have a module with constants (constants.pm):
##
package constants;
my %month_number = (
'Jan' = '01',
'Feb' = '02',
'Mar' = '03',
'Apr' = '04',
'May' = '05',
'Jun' = '06',
'Jul' = '07',
'Aug' = '08',
'Sep' = '09',
'Oct' = '10',
'Nov' = '11',
'Dec' = '12'
);
sub get_constant
{
my $name = shift;
my $ret = ();
$month_number{Dec}\n; #-- ODD ROW
eval '$ret = \\%month_number';
print $_ - $ret-{$_}\n foreach (keys %{$ret}); # just to trace
print $ret=$ret-{Dec}\n;# just to trace
return $ret;
}
1;
#EOF
and a dummyscript constant.pl:
use constants;
my $bla = constants::get_constant ('%month_number');
#EOF
when i run the script with row (--- ODD ROW) it workds fine:
bash-2.04$ perl constant.pl
Oct - 10
Dec - 12
Mar - 03
Feb - 02
Jan - 01
Nov - 11
May - 05
Aug - 08
Sep - 09
Jul - 07
Apr - 04
Jun - 06
HASH(0x80f8270)=12
but if i remove that line i get:
bash-2.04$ perl constant.pl
HASH(0x80f8270)=
ie it doesn't seems to find the variable...This seems like vodoo to me.
Can anyone explain or point me to a place with an explanation?
/Jon