Hi all,<div><br></div><div>As a result of some hacking on some code, I identified some quirky behaviour with regards to 'local'...   I have whittled the problem down to it simplest form - see below.</div><div><br></div>
<div>Basically speaking, I would have expected the inner-array-variable to become localised to block scope.  Is there something that I am missing here?</div><div><br></div><div>regards,</div><div>Mathew Robertson</div><div>
<br></div><div><br></div><div><div>#!/usr/bin/perl</div><div>use strict;</div><div>use warnings FATAL => 'all';</div><div>use Data::Dumper; $Data::Dumper::Indent = 1; $Data::Dumper::Sortkeys = 1;</div><div>our %HANDLERS;</div>
<div><br></div><div># This block, as expected, de-localises %HANDLERS at block scope.</div><div><br></div><div>$HANDLERS{a} = sub {};</div><div>$HANDLERS{b} = sub {};</div><div>print Dumper(\%HANDLERS);</div><div>{</div><div>
  local %HANDLERS = %HANDLERS;</div><div>  $HANDLERS{c} = 't';</div><div>  print Dumper(\%HANDLERS);</div><div>}</div><div>print Dumper(\%HANDLERS);</div><div><br></div><div>print "-" x 50 . $/;</div><div>
<br></div><div># Unexpectedly, no de-localising of %HANDLERS at block scope.</div><div># I would have expected $HANDLERS{c} to be localised.</div><div><br></div><div>$HANDLERS{c} = ['t'];</div><div><br></div><div>
print Dumper(\%HANDLERS);</div><div>{</div><div>#  local %HANDLERS = %HANDLERS;</div><div>  local $HANDLERS{c} = $HANDLERS{c};</div><div>#  local @{$HANDLERS{c}} = @{$HANDLERS{c}};</div><div>  push @{$HANDLERS{c}}, 'u';</div>
<div>  print Dumper(\%HANDLERS);</div><div>}</div><div>print Dumper(\%HANDLERS);</div></div><div><br></div>