Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation

Re^4: Dereferencing %hash that does not exist.

by ig (Vicar)
on Sep 04, 2013 at 22:55 UTC ( #1052453=note: print w/replies, xml ) Need Help??

in reply to Re^3: Dereferencing %hash that does not exist.
in thread Dereferencing %hash that does not exist.

OK, so Dumper output $VAR1 = \''; shows that $self->{_exit} is not a code ref, as expected. You haven't shown the code of Hitachi::Raidcom::exit_routine, but with the error message and Dumper output, it is reasonably clear what is happening.

Your code samples seem to be alternating between exit => \&Hitachi::Raidcom::exit_routine(\%modifier) and _exit => my::module::exit_routine(\%modifier), among other alternatives.

Hitachi::Raidcom::exit_routine(\%modifier) executes the subroutine and yields the value it returns.

&Hitachi::Raidcom::exit_routine(\%modifier) does the same. The & is optional in this case (with the arguments in parentheses) and makes no difference.

\&Hitachi::Raidcom::exit_routine(\%modifier) also runs the subroutine and yields a reference to the value it returns. That's why dumper gives you \''. The \ indicates a reference. In this case, a reference to the empty string.

What will probably work for you is (as AnomalousMonk suggested):

# Setup the log object my $log = LogSimple->new( logdir => $logdir, logfile => $logfile, logl +evel => $loglevel, verbosity => $verbosity, exit => sub { Hitachi::Ra +idcom::exit_routine(\%modifier) } );

With this initialization, $self->{_exit} should be set to a code reference: to the anonymous sub which does nothing but call Hitachi::Raidcom::exit_routine with the argument \%modifier and return whatever that sub returns. The sub isn't executed immediately. It is executed later, in sub wlog, when the code reference is de-referenced and called. But, I haven't tested...

While this will probably work for you, I will mention closure (just one of many articles on the subject). It is a confusing feature for many, so I suggest you not worry about it immediately, but once you have this working, learn about closure before making too much use of anonymous subroutines accessing lexical variables.

Replies are listed 'Best First'.
Re^5: Dereferencing %hash that does not exist.
by perldarren (Novice) on Sep 05, 2013 at 10:42 UTC
    Thank you ig, the penny has dropped for me now & I am a step closer to being a better perl programmer. On the strength of my enlightenment I donated $5 to the cause. Thank you to all who assisted me.

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (3)
As of 2023-06-04 04:16 GMT
Find Nodes?
    Voting Booth?
    How often do you go to conferences?

    Results (17 votes). Check out past polls.