in reply to Re: Until there's nothing but spaces?
in thread Until there's nothing but spaces?

Good thing you pointed out that this code is untested, because it is wrong! Someone posted this very same snippet a couple of weeks ago and merlyn pointed out a subtle way in which it can fail.

But rather than elaborating a more and more complex regexp for such a simple operation, I like to spell things out more simply, but using something like:

  next if $inode eq '.' or $inode eq '..';

This avoids pulling in the regexp machinery, and is much easier for the next maintainer (who may not be as good a rexexp wizard as yourself) to figure out what is going on.

--
g r i n d e r

Replies are listed 'Best First'.
Re: Re:x2 Until there's nothing but spaces?
by mandog (Curate) on Oct 02, 2001 at 04:51 UTC
    Esteemed Sibling Grinder:

    Here you write "Good thing you pointed out that this code is untested, because it is wrong!" ....

    Thank you for your correction. At first I doubted you and the saint who's words you invoked.

    The correct regular expression is:
     /\A\.{1,2}\z/ My regular expression was:

    /^\.{1,2}$/ <code> perldoc perlre
    reads in part:
    ...The \A and \Z are just like ``^'' and ``$'', except that they won't match multiple times when the /m modifier is used, while ``^'' and ``$'' will match at every internal line boundary. ...

    Since there is no /m modifier in the picture I doubted you....

    However,  perldoc perlre continues:
    To match the actual end of the string and not ignore an optional trailing newline, use \z.

    As soon as I noticed that /z and /Z are as different as a and A, I realized you were correct.

    Of course you are also correct about using  eq