Все ваши номера имеют общий формат. Вы можете написать только одно регулярное выражение, которое работает, чтобы захватить любое из ваших чисел. Затем составьте более длинное регулярное выражение, соответствующее вашим записям.
Преимущество этого метода перед разделением заключается в том, что вы можете запросить предупреждение, если ваши данные не соответствуют ожидаемому формату.
my $num = qr{
\s* # skip whitespace
( # begin capture
[\d,.]+ # comma, period, digits
) # end capture
\s* # skip whitespace
}x;
my (
$prev_bal, $pmts_received, $adjustments, $charges,
$pmt_without_fine, $pmt_with_fine
) = $data =~ /$num \- $num \- $num \+ $num = $num $num/x
or warn "Unexpected format: $data\n";