I just didn't think of coming up with a Perl 6 solution, and even now I don't see a particularly elegant and readable way.
So I've just ported toolic's solution to Perl 6, making the returned list of found values lazy:
my @a = <eval DBIC::3 DBIC::2 DBIC::1 MyApp::3 MyApp::2 MyApp::1 Dance
+r::3 Dancer::2 Dancer::1>;
my @filtered := gather {
my $flag = 0;
for @a {
last if /Dancer/;
$flag = 1 if /DBIC/;
$flag = 2 if $flag && !/DBIC/;
take $_ if $flag == 2;
}
}
.say for @filtered;
(Tested with current Niecza)
|