in reply to validate variable-length lines in one regex?
And with use v5.22 you can clean the regex up even more by making all groups non-capturing with the "n" modifier:/^[A-Z]\d\d +1?\d +\d?\d(?:\.1)? +[0-3](?: +\d?\d\.\d)+ *$/ or ($bad +{$line++} = $_) && next; my ($t, $p, $s, $d, @c) = split / +/;
There is something to be said for keeping it simple and clear. So maybe even remove repeated space beforehand:/^[A-Z]\d\d +1?\d +\d?\d(\.1)? +[0-3]( +\d?\d\.\d)+ *$/n
use v5.10; use warnings; my $valid = qr/^[A-Z]\d\d 1?\d \d?\d(\.1)? [0-3]( \d?\d\.\d)+ ?$/; $, = ', '; while (<DATA>) { chomp; tr/ / /s; say /$valid/ ? split : "Error:$_"; }; __DATA__ C31 6 3 2.4 1.5 2.6 C32 2 7 3 1.0 H31 1 1 0 21.0 11.2 5.3 1.4 T11 2 1 0 6.0 1.1 2.2 L06 1 1 0 1.0 3.3 L06 1 4 0 1.1 1.8
|
|---|