Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

Re: match sequences of words based on number of characters

by Anonymous Monk
on Feb 17, 2013 at 18:22 UTC ( #1019181=note: print w/ replies, xml ) Need Help??


in reply to match sequences of words based on number of characters

add use re 'debug'; to see what the regex engine is doing, and why your match fails

Then, use my @list = grep $lengthy, split /\W/, $str

Where

my $lengthy = do { my @lengths = ( 2, 6, 6 ); my $lix = 0; sub { if( $lix < @lis and $lengths[ $lix ] == length $_ ){ $lix++; return !!1; } return !!0; } };
or whatever counting logic you require


Comment on Re: match sequences of words based on number of characters
Download Code
Re^2: match sequences of words based on number of characters
by AnomalousMonk (Abbot) on Feb 17, 2013 at 20:09 UTC

    I tried a few variations and I can't seem to make that work. Can you supply a self-contained, working example?

      Hi, when I run your code it produces nothing. Did I miss something? Thanks for your advice, nicemank.

        Are you replying to me (AnomalousMonk) or to the Anonymous Monk?

      I tried a few variations and I can't seem to make that work.

      Show your efforts :)

      What do you think is wrong with it?

      Can you supply a self-contained, working example?

      Theoretically :) did you try Basic debugging checklist?

      I think this ought to show what is wrong with my syntax

      #!/usr/bin/perl -- use strict; use warnings; use Data::Dump; my $str = "xxxx yy zzzzz xxxx qqq"; my $lengthy = sub { warn 1 }; my @list = grep $lengthy, split /\W/, $str; dd \@list; __END__

      Its basically as if I wrote grep 1, ...

      and here I thought grep knew to take a subroutine reference, it works with grep \&somename, but it has to be grep $lengthy->(),...

      And on top of that no warnings of any kind, surprising

        #!/usr/bin/perl -- use strict; use warnings; use Data::Dump; my $str = "xxxx yy zzzzz xxxx qqq sixsix"; my $lengthy = do { my @lengths = ( 2, 6, 6 ); my $lix = 0; sub { warn "shabba @_ $_"; if( $lix < @lengths and $lengths[ $lix ] == length $_ ){ $lix++; return !!1; } return !!0; } }; #~ grep 1, #~ my @list = grep $lengthy, split /\W/, $str; #~ grep 1, #~ my @list = grep sub { $lengthy->() }, split /\W/, $str; #~ slower #~ my @list = grep { $lengthy->() } split /\W/, $str; my @list = grep $lengthy->() , split /\W/, $str; dd \@list; __END__ shabba xxxx at funk line 8. shabba yy at funk line 8. shabba zzzzz at funk line 8. shabba xxxx at funk line 8. shabba qqq at funk line 8. shabba sixsix at funk line 8. ["yy", "sixsix"]

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (12)
As of 2014-12-22 22:02 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (132 votes), past polls