On Jan 3, Booher Timothy B 1stLt AFRL/MNAC said:

>next if $line =~ (/^\*+/)|(/^\s*$/);

Wow.  The reason that appears to work is a bizarre one indeed.

  while (<FOO>) {
    $line = $_;
    next if $line =~ (/foo/) | (/bar/);
    # ...
  }

That code is the as

  while (<FOO>) {
    $line = $_;
    next if ($line =~ /foo/) | ($_ =~ /bar/);
    # ...
  }

The reason that returns true is because both $line and $_ are the same
string.  Safe to say, you have been saved by bizarre coincidence.
Consider yourself lucky.

>and it seems to work, but you say: next if $line =~ /^(\*|\s*$)/; wouldn't
>this only find one "*" that the line starts with.

The regex /^a/ and the regex /^a+/ are, for your purpose, the same
thing.  If a string matches /^a+/, it HAS to ALSO match /^a/.

>* foo
>************************ foo
>
>would both be skipped

Yes.  Both begin with a '*'.  The fact that the second happens to have a
lot more '*'s after the first one is not important.

>what about $line =~ /^(\**|\s*$)/;

No, because /\**/ matches ZERO or more stars, and every line matches that.

-- 
Jeff "japhy" Pinyan      [EMAIL PROTECTED]      http://www.pobox.com/~japhy/
RPI Acacia brother #734   http://www.perlmonks.org/   http://www.cpan.org/
** Look for "Regular Expressions in Perl" published by Manning, in 2002 **
<stu> what does y/// stand for?  <tenderpuss> why, yansliterate of course.


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to