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