Search code examples
perlnestedanonymous-functionanonymoussubroutine

Perl Anonymous Subroutine/Function error


I have the following piece of code: (extremely simplified for the purposes of this question, but perfectly illustrates the problem I am having)

#!/usr/bin/perl

use strict;
use warnings;

&outer;
my $connected_sub;

sub outer {
    print "HELLO\n";

    &$connected_sub;
    $connected_sub = sub {
        print "GOODBYE\n";
    }
}

When run the program gives this output and error:

HELLO
Use of uninitialized value in subroutine entry at subTesting line 13.
Can't use string ("") as a subroutine ref while "strict refs" in use at subTesting.pl line 13.

Am I totally overlooking something here? I cannot understand or work out what the problem with this is.


Solution

  • The $connected_sub is not initializated. Try to assign to an anonymous sub:

    my $connected_sub = sub {
       print "The code you need to run\n";
    }
    

    At the definition, and drop the code after the &$connected_sub call

    This is the complete example modified:

    #!/usr/bin/perl
    use strict;
    use warnings;
    
    
    my $connected_sub = sub {
       print "GOODBYE\n";
    };
    
    &outer;
    
    sub outer
    {
            print "HELLO\n";
            &$connected_sub;
     }