in reply to Why callbacks?
No need for globals, just have the coderef use lexicals in the scope it's declared in (i.e. use a closure).
{ my $returned_data = [ ]; sub my_fetch_callback { push @{ $returned_data }, $_[0] } routine_wanting_callback( \&my_fetch_callback ); for my $datum ( @{ $returned_data } ) { munge_it( $datum ); } }
Update: Moved bracket after for so it would, you know, actually work. Duurr. Stupid trees making pollen affecting sinuses with their pollen making brane numbing congestion stuff.
Another example: You could also pass a coderef which stores the results by calling methods on an object you provide.
my $line_holder = Line::Holding->new( ); routine_wanting_callback( sub { $line_holder->hold( $_[0] ) } ); $line_holder->process_held_lines;
Nothing says the callback has to call a named subroutine sitting in the symbol table (unless the callback wanting routine says it takes the name of a subroutine of course; but that'd just be bad design :).
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Why callbacks?
by pileofrogs (Priest) on Mar 30, 2007 at 17:19 UTC | |
by Joost (Canon) on Mar 30, 2007 at 17:32 UTC | |
by Fletch (Bishop) on Mar 30, 2007 at 17:27 UTC | |
by pileofrogs (Priest) on Mar 30, 2007 at 17:32 UTC | |
by Fletch (Bishop) on Mar 30, 2007 at 17:41 UTC |