use strict;
my $str = ' - 1 case of ProductA 2020 at $123,456.00 in Warehouse A
- 2 cases of ProductB 2025 at $123,456.00 in Warehouse B - optional remark
- ProductC - optional remark - 3 cases at $987,654.00 in 2050 in Warehouse C';
my $regex = qr/(?:(?:(^ *-? +)|(\d+ +cases?)|(Product\w+)|(\d{4})|(\$[\d,.]+)|(Warehouse +\w+)|(-[^-\n]+(?:-|$)))(?: +(?:of|at|in) +| +)?)+/mp;
my $subst = '\\2\\t\\3\\t\\4\\t\\5\\t\\6\\t\\7';
my $result = $str =~ s/$regex/$subst/rg;
print "The result of the substitution is' $result\n";
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Perl, please visit: http://perldoc.perl.org/perlre.html