Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

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

by moritz (Cardinal)
on Feb 21, 2012 at 15:00 UTC ( [id://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?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://955327]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others wandering the Monastery: (4)
As of 2024-04-25 11:44 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found