in reply to The way around < 5.6.x grep(... [,]* readdir(DIR)

I'm sorry, I can't quite tell what your question is.

As for the syntax for grep, you can write a simple one two ways.

The first is with a block and without a comma.

grep { /x/ } @source;

The second is with an expression and with a comma.

grep( /x/, @source );

The second one can be written without the parentheses, but not without the comma.

grep /x/, @source;

If you need to be more complicated than a simple expression, you need a block because you can't use a semicolon in a simple expression.

grep { my $x = $_; $x =~ s/\D//g; my $y = f( $x ); ( $y > $x ) } @source;

Sometimes you can cook a bit with operators.

grep s/\D//g && f( $_ ) > $_, @source;

...but not always. The difference between the last two examples is that the second one modifies @source, while the second one doesn't.

Again, I can't tell what your question is, so I don't know if it helps. Hopefully there's something useful.

Replies are listed 'Best First'.
Re^2: The way around < 5.6.x grep(... [,]* readdir(DIR) (5.6)
by tye (Sage) on Mar 19, 2008 at 21:41 UTC

    I also dispute the OP's implication that Perl 5.6 and/or prior (or is it "since"?) required a comma after a block argument to grep. I'm pretty sure that this particular aspect of the grammar has not changed in a very long time (not since the ability to use a block was implemented).

    - tye