in reply to Re^2: perl 5.10 bug or not?
in thread perl 5.10 bug or not?

True... (and probably I should give myself a downvote for lack of precision)... BUT , 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 I've misconstrued your question or the logic needed to answer it, I offer my apologies to all those electrons which were inconvenienced by the creation of this post.

Replies are listed 'Best First'.
Re^4: perl 5.10 bug or not?
by AnomalousMonk (Archbishop) on Aug 17, 2013 at 06:55 UTC
    ... 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.

Re^4: perl 5.10 bug or not?
by sotona (Scribe) on Aug 20, 2013 at 15:28 UTC

    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

      See perlre:

      NOTE: Failed matches in Perl do not reset the match variables, which makes it easier to write code that tests for a series of more specific cases and remembers the best match.

      $1 and $2 have their old values from a match somewhere else in your code.

      Always guard use of $1 with an if statement to make sure it matched:

      if( m/(.*) <(.*)>/ ) { print "Matched '$1' + '$2'"; } else { print "Did not match"; };