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";
Outputs:
A-B =~ /A.+B/ --> worked
A-B =~ /A.*B/ --> worked
AB =~ /A.+B/ -->
AB =~ /A.*B/ --> worked