Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re^4: use 'local' modifier to hashref element

by nbtrap (Sexton)
on Jun 06, 2013 at 01:03 UTC ( #1037340=note: print w/ replies, xml ) Need Help??


in reply to Re^3: use 'local' modifier to hashref element
in thread use 'local' modifier to hashref element

Interestingly, the code:

#!/usr/bin/perl use warnings; use strict; my %hash; my @array; { local $hash{foo} = 'bar'; local @array; }
complains that you "Can't localize lexical variable @array", but it has no problem localizing $hash{foo}.

Even more interestingly, the code:

#!/usr/bin/perl use warnings; use strict; use Data::Dumper; my %hash; our @array; { local $hash{foo} = 'bar'; local @array; print Dumper(\%main::); }
shows that the localization of the hash slot does _not_ manipulate the symbol table--even without "use strict".


Comment on Re^4: use 'local' modifier to hashref element
Select or Download Code
Replies are listed 'Best First'.
Re^5: use 'local' modifier to hashref element
by shmem (Canon) on Jun 06, 2013 at 13:56 UTC
    ... complains that you "Can't localize lexical variable @array", but it has no problem localizing $hash{foo}.

    It has no problem localizing the value of an array element, either:

    my %hash; my @array; { local $hash{foo} = 'bar'; local $array[1] = 'foo'; print "inner scope:\n"; print "$_ => $hash{$_}\n" for keys %hash; print "[$_] $array[$_]\n" for 0..$#array; } print "outer scope:\n"; print "$_ => $hash{$_}\n" for keys %hash; print "[$_] $array[$_]\n" for 0..$#array; __END__ inner scope: foo => bar [0] [1] foo outer scope:

    Were you trying to localize the entire hash - as you did with @array - perl would complain also:

    Can't localize lexical variable %hash at foo line x.
    perl -le'print map{pack c,($-++?1:13)+ord}split//,ESEL'
Re^5: use 'local' modifier to hashref element
by jakeease (Friar) on Jun 06, 2013 at 08:07 UTC

    Interestingly, the code: ... complains that you "Can't localize lexical variable @array", but it has no problem localizing $hash{foo}.

    Because $hash{foo} is a scalar and it is localizing the value.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1037340]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (16)
As of 2015-07-28 15:08 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (257 votes), past polls