Предполагая, что поля в ваших данных разграничены пробелами
while (<$fh>) {
my ($first, @rest) = split;
printf "%-35s @rest\n", $first;
}
Первое поле теперь будет шириной 36, выровнено по левому краю из-за -
в формате printf
.См. sprintf для многих деталей.Остальная часть печатается с одинарным пробелом между исходными полями, разделенными пробелами, но вместо этого может быть выполнена по желанию (разделенная табуляцией, фиксированная ширина ...).
Или вы можете оставить «остаток» после первогонетронутым, разделив строку на две части
while (<$fh>) {
my ($first, $rest) = /(\S+)\s+(.*)/;
printf "%-35s $rest\n", $first;
}
(или используйте split ' ', $_, 2
вместо регулярного выражения)
Пожалуйста, дайте больше подробностей, если есть другие требования.