use warnings; use strict; use Data::Dumper; my $equation = '979x + 87y - 8723z = 274320'; my @parts = ($equation =~ /(?:(.*?)([xyz]))/ig); print Dumper(\@parts); __END__ $VAR1 = [ '979', 'x', ' + 87', 'y', ' - 8723', 'z' ];