sub toggle {
my @states = @_;
my $index = 0;
return sub {
return $states[ $index++ % ( scalar @states ) ];
}
}
####
my $t = &toggle qw( alfa beta gamma );
print &$t(), "\n" foreach ( 1 .. 20 );
####
sub curry {
my ( $fnc, @arguments ) = @_;
return sub {
return &$fnc( @arguments, @_ );
}
}
####
sub echo {
return join( " ", @_ );
}
####
my $boss = &curry( \&echo, "My", "boss:" );
my $friend = &curry( \&echo, "Johnny:" );
print &$boss qw( has pointy hair ), "\n"; # "My boss: has pointy hair
print &$friend qw( likes rock and roll ), "\n"; # etc.