with use strict and use warnings putting the hash outside function_one as a
lexical or global both seem to work.  Even making the hash inside function_one
a global seems to generate a warning if use warning is in effect. so putting a
function inside another seems to be no different from have it outside it.
/kk


On Mon, 11 Jun 2001, Charles Lu wrote:
> When I run the following code with the Warning flag I get the following 
> message:
> 
> Variable "%hash" will not stay shared....
> 
> Here is my code:
> 
> #trying to sort a Hash by Value
> use strict;
> 
> my @list = ('apple',12, 'peach', 2, 'pear', 45);
> &function_one(@list);
> 
> sub function_one {
>    my %hash = @_;
> 
>    my @newhash = sort by_value keys %hash;
> 
>    foreach(@newhash) {
>        print "$_\t\t$hash{$_}\n";
>    }
> 
>    sub by_value{
>       $hash{$a} <=> $hash{$b};
>    }
> }
> I guess it is complaining that I am calling a subroutine within a subroutine 
> and the variable %hash can't be shared.  But the code still works.  I found 
> out that if I replace the "MY" in front of %hash with "OUR", the warning 
> will go away.  Local() will also work but since I have "use strict" it 
> FORCES me to use my().  So how do we deal with calling subroutines within a 
> subroutine in terms of sharing variables?
> 
> any suggestions?
> 
> Charles
> 
> 
> _________________________________________________________________
> Get your FREE download of MSN Explorer at http://explorer.msn.com

Reply via email to