Hello all... 

A question regarding closures used as function templates: 

Assume the following program #1: 
------------------------------------------------------------ 
use strict; 
my $food; 

$food->{cat}->{young} = 'fish'; $food->{dog}->{young} = 'bones'; 
$food->{dog}->{senior} = 'meat'; 

for my $pet (keys %{$food}){ 
        no strict 'refs'; 
        *$pet = sub     { 
                                        my $argument = shift; 
                                        return ($food->{$pet}->{$argument}) if 
                                                defined($food->{$pet}->{$argument}); 
                                } 
} 

print dog('young'),"\n"; 
print cat('young'),"\n"; 

------------------------------------------------------------ 

and the following program #2: 
------------------------------------------------------------ 
use strict; 
my $food; 

sub dog {
        my $argument = shift;
        $food->{dog}->{young} = 'bones'; 
        $food->{dog}->{senior} = 'meat'; 

        return ($food->{dog}->{$argument}) if
                defined($food->{dog}->{$argument}); 
} 

sub cat { 
        my $argument = shift;
        $food->{cat}->{young} = 'fish'; 

        return ($food->{cat}->{$argument}) if
                defined($food->{cat}->{$argument});
} 


print dog('young'),"\n";
print cat('young'),"\n"; 

------------------------------------------------------------ 

I like the first one (#1), because it is shorter (a nice abstract) and
let me define many functions only by concetrating on the $food hash at
the beginning of my file. Much code repetition avoided. My question is:
Is it much better regarding memory usage to use the second one? If all
the values of the $food hash are scalar strings that take up to 10 kb
(all together) will I gain much savings in memory by using the second way
(#2) and have the declarations of $food keys/values inside each function
instead of putting them all on top of the file? 

Another related question: I have these subs inside a module. Assume that
I use the first way (#1). Since I 'use' this module in an other perl
file, will all the $food hash stay in memory as long as the other perl
file is running? 

Thank you,
GFoo 

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to