use warnings; use strict; use Data::Dump; my @syntax = ( [qr/cd/, sub { dd "callback", \@_ }] ); my $line = "abcdef"; for my $syn (@syntax) { my ($re, $cb) = @$syn; if (my (@matches) = ($line =~ $re)) { $cb->(@matches); last; } } __END__ ("callback", [1])