use Data::Dumper; open (my $infile, "<", "Input.txt") || die $!; while (defined(my $line = <$infile>)) { chomp $line; my @rxn = split /#/, $line; next if length $rxn[1] == 0; my ($left_side, $right_side) = split /\s*<=>\s*/, $rxn[1], 2; my @left_elements = split /\s*\+\s*/, $left_side; my @right_elements = split /\s*\+\s*/, $right_side; my @combinations; for my $left_element (@left_elements) { for my $right_element (@right_elements) { push @combinations, [$left_element, $right_element]; } } print join(", ", map { "$_->[0]=$_->[1]" } @combinations), "\n"; # print Dumper(\@combinations); }