in reply to Null scalars in array

The + means match . (any non-\n character) one or more times. Use * instead, which means 0 or more times. You'll still be requiring two spaces between foo and bar; if you have just one, /foo ?(.*) bar/ may do what you want.

Replies are listed 'Best First'.
Re^2: Null scalars in array
by Smaug (Pilgrim) on Sep 20, 2006 at 17:53 UTC
    Thanks, that's most likely my problem, the "null values" are actually not nulls they are spaces, sometimes 1 but it could be up 10.
    Does this mean the piece of regex will not work?
    Thanks again for the help I don't know how I would cope or avoid killing people without perlmonks.

      Your "nulls" weren't nulls at all. They arn't spaces either. They are just cases where your regex didn't match, so it didn't return anything. + Requires at least one occurence of the thing it is quantifiying. So if you say "A B" =~ /A(.+?)B/ you'll get a hit, because there is at least one thing between the A and B. If you do "AB" =~ /A(.+?)B/ it wont match because there isn't at least one thing between A and B. * however matches 0 or more things, so it would match in both cases.

      use strict; use warnings; print "A-B =~ /A.+B/ --> "; print "worked" if "A-B" =~ /A.+B/; print "\n"; print "A-B =~ /A.*B/ --> "; print "worked" if "A-B" =~ /A.*B/; print "\n"; print "AB =~ /A.+B/ --> "; print "worked" if "AB" =~ /A.+B/; print "\n"; print "AB =~ /A.*B/ --> "; print "worked" if "AB" =~ /A.*B/; print "\n";
      A-B =~ /A.+B/ --> worked A-B =~ /A.*B/ --> worked AB =~ /A.+B/ --> AB =~ /A.*B/ --> worked

      Eric Hodges
      You've confused me now. What is your input and what are your desired and actual outputs?