... there are no GT or LT symbols in OP's sample
my $email = 'someuser@example.com'
hence, dot star swallows all, in the relevant example.
If the relevant example is
my $email = 'someuser@example.com'
$email =~ /(.*) (<.*>)/;
say "1='$1' 2='$2'";
from the OP, then dot star – i.e., (.*) – swallows nothing at all. The '<' and '>' characters are required to match, therefore there is no match, no swallowing, no capturing, nuttin'. As pointed out elsewhere, not even $1, $2, etc., are altered. In fact, because the first (.*) capture group is followed by a required ' ' (space), the angle brackets don't even figure in: .* will initially grab everything, then backtrack repeatedly to try to match a space; finding none, it will eventually give up everything it grabbed and announce its miserable failure, triggering overall match failure.
| [reply] [d/l] [select] |
The problem is actually why do I get some capture if I had no previous successful match.
In case of "foo <bar>" I definitely should get two captures, but I have no clue why do I get a capture "bar.com" with "foo@bar.com" sample. Observed on v5.10.0 DEVEL34916
| [reply] |
if( m/(.*) <(.*)>/ ) {
print "Matched '$1' + '$2'";
} else {
print "Did not match";
};
| [reply] [d/l] [select] |