my $param_rx = '[^),]+'; my $list_start_rx = '\s*\(\s*'; my $list_end_rx = '\s*\)\s*'; $_ = $stmt; /^\s* (\S+) \s+ (\S+) $list_start_rx ($param_rx(?:\s*,\s*$param_rx)*)? $list_end_rx =\s* (?:0x)?\d+ \s*;\s*$ /cgxo; if (pos() != length($stmt)) { print "\n$stmt\n"; print ' ' x pos(); print "^<-- Parse failed here (column " . pos() . " of " . length($stmt) . ")\n"; &error ($ARGV, $line_num, 'Exiting'); }