I have yet to find a difference - I am not sure if there even is one - but I'm probably not being creative enough in my test cases...
#!/usr/bin/env perl
use warnings;
use strict;
use Test::More;
#use re 'debug';
sub testre (_) {
my $txt = shift;
my @m1 = $txt =~ /<(.*?)>/sg;
my @m2 = $txt =~ /<((?:(?!>).)*)>/sg;
my @m3 = $txt =~ /<([^>]*)>/sg;
is_deeply \@m1, \@m2, "$txt => (@m1) = (@m2)";
is_deeply \@m1, \@m3, "$txt => (@m1) = (@m3)";
}
testre for (
"<", "<<", "<<<", ">", ">>", ">>>",
"<<<>", "<<>", "<>", "<>>", "<>>>",
"<<>>", "<<<>>>",
"<><>", "<><><>", "<><<><>", "<><>><>",
"a<b>c", "a<b>>c", "a<b>>>c", "a<<b>c", "a<<<b>c",
"a<<b>>c", "a<<<b>>>c",
"a<b>c<d>e", "a<b>c<d>e<f>g",
"a<b>c<<e>f<g>h", "a<b>c<d>>e<f>g",
"a<b>c<e<f>g<h>i", "a<b>c<d>e>f<g>h",
"<\n>\n", "<\n<\n>\n>\n", "<\n>\n<\n>\n",
);
done_testing;