- or download this
my $curried_foo = curry( \&foo, args... );
- or download this
sub log_to_handle {
my ($fh, $heading, $message) = @_;
print $fh "$heading: $message", $/;
}
- or download this
my $app_server = AppServer->new( logger => $mylogger, ... );
- or download this
sub app_server_diagnostic_logger {
log_to_handle( *STDERR, "app server", @_ );
...
$app_server = AppServer->new(
logger => \&app_server_diagnostic_logger, ...
);
- or download this
$app_server = AppServer->new(
logger => sub {
log_to_handle( *STDERR, "app-server", @_ )
}, ...
);
- or download this
$app_server = AppServer->new(
logger => curry( \&log_to_handle, *STDERR, "app-server" ),
...
);
- or download this
$app_server = AppServer->new(
logger => log_to_handle( *STDERR, "app-server" ),
...
);
- or download this
$app_server = AppServer->new(
logger => log_to_handle_c( *STDERR, "app-server" ),
...
);
- or download this
sub curry {
my $f = shift;
my $args = \@_;
sub { $f->(@$args, @_) };
}
- or download this
*log_to_handle_c = curry( \&curry, \&log_to_handle );
- or download this
sub get_function_names_from_package {
no strict 'refs';
...
grep !/^_|^[_A-Z]$/, # drop _underscored & ALL_CAPS
keys %$symtab; # get all symbols for package
}
- or download this
{ package Test;
sub one { }
...
my @names = get_function_names_from_package("Test");
print "@names", $/;
# Test::three Test::one Test::two
- or download this
for (@names) {
no strict 'refs';
my $curried_name = $_ . "_c";
*$curried_name = curry( \&curry, \&$_ );
}
- or download this
use AutoCurry qw( foo ); # pass ':all' to curry all functions
sub foo { print "@_$/"; }
# currying variant, foo_c, is created automatically
- or download this
package AutoCurry;
...
modify it under the same terms as Perl itself.
=cut