Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re: Functional Programming & method rewriting

by pg (Canon)
on Oct 28, 2004 at 22:17 UTC ( #403534=note: print w/replies, xml ) Need Help??


in reply to Functional Programming & method rewriting

It becomes clear as what's going on, once we add some print outs at certain critical point (also see comments):

use Data::Dumper; use strict; sub prefix_later { my ($just_once,$and_later) = @_; #passed by calling part, see below my $ct=0; return sub { my (@args) = shift(); #this is just a trick ;-) print Dumper(\@args); print "ct = $ct\n"; #will not be reset to zero, becasue of closu +re ((!$ct++) ? #only true for the first time sub { print "sub1\n"; $just_once->(@args); #hi mom } : sub { print "sub2\n"; $and_later->(@args); #this was unneccessary: $just_once->(@args); #hi mom } )->(); } } my $hi_mom = prefix_later( sub { print "hi mom\n"; },#this is just once sub { print "this was unneccessary:\n"; } #this is and later ); $hi_mom->() for (1..3);

Outputs:

#first round $VAR1 = [ undef ]; ct = 0 sub1 hi mom #second round $VAR1 = [ undef ]; ct = 1 sub2 this was unneccessary: hi mom #third round $VAR1 = [ undef ]; ct = 2 sub2 this was unneccessary: hi mom

Replies are listed 'Best First'.
Re^2: Functional Programming & method rewriting
by SpanishInquisition (Pilgrim) on Oct 28, 2004 at 22:36 UTC
    Yep, good explanation. To add some further confusion (or perhaps to explain the shift trick), if I change around the last few lines and the functions will actually take arguments ...

    my $hi_mom = prefix_later( sub { my $f = shift(); print "got: $f\n"; }, sub { print "this was unneccessary:\n"; } ); $hi_mom->("nerp") for (1..3);

    Output:

    got: nerp this was unneccessary: got: nerp this was unneccessary: got: nerp

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others contemplating the Monastery: (5)
As of 2023-09-21 18:18 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?