Вам нужно выяснить, где находятся столбцы.Как действительно отвратительный хак, вы можете прочитать весь файл, а затем строку или строки вместе:
my @file = <file>;
chomp @file;
my $t = "";
$t |= $_ foreach(@file);
$ t будет содержать пробельные символы в столбцах только там, где в них всегда были пробельные символыколонка;другие столбцы будут содержать двоичный мусор.Теперь разделите его на совпадение с нулевой шириной, которое соответствует непробелу:
my @cols = split /(?=[^ ]+)/, $t;
Мы действительно хотим, чтобы ширина столбцов генерировала формат unpack ():
@cols = map length, @cols;
my $format = join '', map "A$_", @cols;
Теперь обработайте файл!:
foreach my $line (@file) {
my($field, $field2, ...) = unpack $format, $line;
your code here...
}
(Этот код был проверен лишь незначительно.)