All pastes #47928 Raw Edit

Unnamed

public text v1 · immutable
#47928 ·published 2006-04-03 01:03 UTC
rendered paste body
Example 4.4: Closures Sharing Variables

sub even_odd_print_gen {
    # $last is shared between the two procedures
    my ($rs1, $rs2);
    my ($last) = shift;  # Shared by the two closures below
    $rs1 = sub { # Even number printer
        if ($last % 2) {$last ++;}
        else { $last += 2};
        print "$last \n";
    };
    $rs2 = sub { # Odd number printer
        if ($last % 2) {$last += 2 }
        else { $last++};
        print "$last \n";
    };
    return ($rs1, $rs2);   # Returning two anon sub references
}

($even_iter,$odd_iter) = even_odd_print_gen(10);
&$even_iter ();  # prints 12
&$odd_iter ();   # prints 13
&$odd_iter  ();  # prints 15
&$even_iter ();  # prints 16
&$odd_iter  ();  # prints 17