Why doesn't the first print statement output what I expect:

first = This is a test string, sec = This is a test string 

Since both * and + are greedy, why does the the inner * i.e. inside the "((" in the first match not consuming the entire string?

use strict;
use warnings;

my $string = "This is a test string";
$string =~ /((.*)*)/; 
print "first = $1, sec = $2\n";  #prints "first = This is a test string, sec ="

$string =~ /((.+)*)/;
print "first = $1, sec = $2\n";  #prints "first = This is a test string, sec = This is a test string"
Edit
Report