#!/usr/bin/perl use 5.010; use Data::Dumper; my $equation = '979x + 87y - 8723z = 274320'; my @lhs; die "match failed" unless $equation =~ / ^ (?: (?.*?) (?[xyz]) (?{ push @lhs, $+{coeff}, $+{var} }) )++ \s* = \s* (?.*) $ /ix; my $rhs = $+{rhs}; say Dumper([\@lhs, $rhs]);