Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change

Re: List::MoreUtils before, after and ... between?

by moritz (Cardinal)
on Feb 21, 2012 at 15:00 UTC ( #955327=note: print w/replies, xml ) Need Help??

in reply to List::MoreUtils before, after and ... between?

If you are sure that both regexes will be found, you can write something like this:

use List::MoreUtils qw/first_index last_index/; use 5.010; use strict; use warnings; my @a = qw<eval DBIC::3 DBIC::2 DBIC::1 MyApp::3 MyApp::2 MyApp::1 Dan +cer::3 Dancer::2 Dancer::1>; my $from = last_index { /DBIC/ } @a; my $to = first_index { /Dancer/ } @a; say for @a[$from + 1..$to - 1];

If one or both regexes might not match, you'd need to special-case undefined $from and $to.

Replies are listed 'Best First'.
Re^2: List::MoreUtils before, after and ... between?
by Boldra (Deacon) on Feb 22, 2012 at 09:13 UTC

    This looks like the most readable to me, thanks Moritz!

    I'm surprised you didn't post a Perl 6 version too ... I love those!

    - Boldra

      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)

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://955327]
[Spenser]: Good morning. How do I install CPAN without yum or a similar utility?

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (9)
As of 2018-03-17 12:20 GMT
Find Nodes?
    Voting Booth?
    When I think of a mole I think of:

    Results (224 votes). Check out past polls.