I'm afraid a bit more context is needed to identify the problem. Could you post your entire bit of code into a gist or pastebin or something for us to see? On Feb 27, 2015 9:52 PM, "Martin G. McCormick" < mar...@server1.shellworld.net> wrote:
> I put together an anonymous subroutine which partly > works. There is an array called @tasks which is defined as a > local variable in the main routine and when I call the anonymous > subroutine, one can still read all the elements in @tasks. > > There is also a single scaler called $task, also created > in main and a foreach loop > > foreach $task (@tasks) { #may be a lease > @results = whatisit($task); > if ( $results[0] eq "IP" ) { #This could be bootP or dynamic. > $numerical_lookup = ipaddr_to_num($task); > @dynamics = netfind($numerical_lookup); > > #dynamics[1] has a value when this is a dynamic lease. > if ( $dynamics[1] ) { #It's dynamic. > &$report_dynamic; > } #It's dynamic. > else { #static > &$report_static; > } #static > } #This could be bootP or dynamic. > > All the code in my sample that you see does work as it should > and gets you to either the report_dynamic orreport_static > anonymous subs. Here is the beginning of the report_static > subroutine. First I declare a local variable in main to use for > the name of the anonymous subroutine. > > my $report_static; > > That is fine. The trouble starts immediately when the subroutine > does. > > $report_static = sub {#What is at this static address? > @hostnames = revdns($task); > > That's where things explode. If I trace each step in that > subroutine, I can still read @tasks but $task has disappeared > the instant I am in the report_static subroutine. > > This is a pretty large application, about 1230 lines and > the logic did work when it all was part of main. > > I would at least think I understood what was happening > if both the @tasks array and the $task scaler became undefined > in report_static but only the scaler goes "poof!" What I was > hoping for was for the loop in the main portion to select which > element in @tasks was used and the anonymous subroutine would do > what it needed to do just as it had done when it was all in > main. > > I am familiar with declaring my $variable; or our > $variable; if one shares variables between subroutines but I > just assumed that in an anonymous subroutine, one was still > working with the same scope as the variables in the routine that > called the subroutine. > > Thanks for any constructive suggestions. > > Martin McCormick > > -- > To unsubscribe, e-mail: beginners-unsubscr...@perl.org > For additional commands, e-mail: beginners-h...@perl.org > http://learn.perl.org/ > > >