>perl -wMstrict -le "my $input1 = 'a=1 gibberish b=2 c=3'; my $match2 = '^(?a=(\d)).*?(?b=(\d))?(?.*?)(?c=(\d))$'; print qq{input1 '$input1'}; print qq{Using regex $match2}; if ($input1 =~ m/$match2/){ print qq{a '$+{a}' b '$+{b}' c '$+{c}' gib '$+{gib}'}; } else { print qq{Input1: didn't match}; } " input1 'a=1 gibberish b=2 c=3' Using regex ^(?a=(\d)).*?(?b=(\d))?(?.*?)(?c=(\d))$ Use of uninitialized value in concatenation (.) or string at ... a 'a=1' b '' c 'c=3' gib ' gibberish b=2 '