my $input1 = 'a=1 gibberish b=2 c=3';
my $input2 = 'a=1 gibberish c=3';
####
my $input1 = 'a=1 gibberish b=2 c=3';
my $input2 = 'a=1 gibberish c=3';
# normal capture
my $match1 = '^(?a=(\d)).*?(?b=(\d)).*?(?c=(\d))$';
# conditional capture
my $match2 = '^(?a=(\d)).*?(?b=(\d))?.*?(?c=(\d))$';
# using $match1
print "\n\nUsing match1 ---> $match1\n\n";
if ($input1 =~ m/$match1/){ print "Input1: a is $+{a} and b is $+{b} and c is $+{c}\n"; }
else { print "Input1: didn't match\n"; }
if ($input2 =~ m/$match1/){ print "Input2: a is $+{a} and b is $+{b} and c is $+{c}\n"; }
else { print "Input2: didn't match\n"; }
# using $match2
# conditional capture on the b element
print "\n\nUsing match2 ---> $match2\n\n";
if ($input1 =~ m/$match2/){ print "Input1: a is $+{a} and b is $+{b} and c is $+{c}\n"; }
else { print "Input1: didn't match\n"; }
if ($input2 =~ m/$match2/){ print "Input2: a is $+{a} and b is $+{b} and c is $+{c}\n"; }
else { print "Input2: didn't match\n"; }
####
Using match1 ---> ^(?a=(\d)).*?(?b=(\d)).*?(?c=(\d))$
Input1: a is a=1 and b is b=2 and c is c=3
Input2: didn't match
Using match2 ---> ^(?a=(\d)).*?(?b=(\d))?.*?(?c=(\d))$
Input1: a is a=1 and b is and c is c=3
Input2: a is a=1 and b is and c is c=3