in reply to Re^2: match sequences of words based on number of characters
in thread match sequences of words based on number of characters

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

Replies are listed 'Best First'.
Re^4: match sequences of words based on number of characters
by Anonymous Monk on Feb 18, 2013 at 00:28 UTC
    #!/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"]