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

Re: Function reference undef when extract from hash?

by reneeb (Chaplain)
on Mar 03, 2008 at 11:09 UTC ( #671635=note: print w/replies, xml ) Need Help??


in reply to Function reference undef when extract from hash?

Do you use use strict and use warnings? Where do you call build_sth('set_to_flag')?

This works:
#!/usr/bin/perl use strict; use warnings; build_sth( 'set_to_flag' ); sub write_flag{ print "Success for flag.\n"; } sub write_sets{print "Success for Set.\n"; } sub do_nothing{print "Exit Here\n";} sub build_sth{ my ($op_code) = @_; my %Op = ( set_to_flag => \&write_flag, set_tree => \&write_sets, default => \&do_nothing ); my $op_exec = $Op{$op_code} ; if( defined $op_exec ){ $op_exec->(); }else{ print "Oops\n"; } }

Replies are listed 'Best First'.
Re^2: Function reference undef when extract from hash?
by Anonymous Monk on Mar 03, 2008 at 18:25 UTC

    I used strict and warning.

    And the call of the build_sth('set_to_flag') in another function which is called in the main per script:

    (continue with previous code) sub somecall{ build_sth('set_to_flag') } somecall();
    I have checked the previous version where I got trapped. I get the code fail when I move the hash outside of function:
    my %Op = ( set_to_flag => \&write_flag, set_tree => \&write_sets, default => \&do_nothing ); sub build_sth { my ($op_code) = @_; my $op_exec = $Op{$op_code} ; if( defined $op_exec ){ $op_exec->(); }else{ print "Oops\n"; } }
    why the code fail in this case?

      why the code fail in this case?

      The only possibly reason is if build_sth('set_to_flag') is called before my %Op = ( ... ); is executed.

      Otherwise, it doesn't fail.

      sub write_flag { print "write_flag\n"; } sub set_tree { print "set_tree\n"; } sub do_nothing { print "do_nothing\n"; } ... code you provided ... build_sth('set_to_flag'); # Prints write_flag

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://671635]
help
Chatterbox?
[Corion]: So Hyperboria is an envrypted, decentralized IPv6 mesh network. I'm interested and want to look how good coverage is in my area. But the API for querying Hyperboria is only reachable over Hyperboria itself. Thanks but no thanks.

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (3)
As of 2017-06-23 07:25 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    How many monitors do you use while coding?















    Results (536 votes). Check out past polls.