The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

use strict;
my $middler=Sub::Middler->new;
$middler->register(mw1(x=>1));
$middler->register(mw2(y=>10));
my $head=$middler->link(
sub {
print "Result: $_[0]\n";
}
);
$head->(0); # Call the Chain
# Middleware 1
sub mw1 {
my %options=@_;
sub {
my ($next,$index)=@_;
sub {
my $work=$_[0]+$options{x};
$next->($work);
}
}
}
# Middleware 2
sub mw2 {
my %options=@_;
sub {
my ($next, $index)=@_;
sub {
my $work= $_[0]*$options{y};
$next->( $work);
}
}
}