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

#!perl
use Test::More tests => 2;
package foo;
sub test : event_cb { push @{$_[0]->{x}}, 'middle' }
sub after : event_cb(after, test) {
push @{$_[0]->{x}}, 'after'
}
sub xtest : event_cb( , test) {
push @{$_[0]->{x}}, 'aftermiddle'
}
package meh;
sub test : event_cb {
push @{$_[0]->{x}}, 'middle'
}
sub test_last : event_cb(-1, test) {
push @{$_[0]->{x}}, 'after'
}
sub test_first : event_cb(1, test) {
push @{$_[0]->{x}}, 'before'
}
package main;
my $f = foo->new;
$f->reg_cb (test => 100 => sub { push @{$_[0]->{x}}, 'first' });
$f->xtest;
is (join (',', @{$f->{x}}), 'first,middle,aftermiddle,after',
'event aliases work');
my $f2 = meh->new;
$f2->reg_cb (test => -0.5 => sub { push @{$_[0]->{x}}, 'shortaftermiddle' });
$f2->event ('test');
is (join (',', @{$f2->{x}}), 'before,middle,shortaftermiddle,after',
'event aliases with prios work');
eval "package meh; sub test_xx :event_cb :xx { }";