Я мог бы использовать любую форму, в зависимости от обстоятельств.
Давайте не будем обращать внимания на сложность пользовательских классов символов, повторяемых 96 раз по одной строке, и вместо этого сосредоточимся на красиво написанном коде.
Рассмотрим:
$foo =~ m{
(\d\d\d\d)
[ ] (\d\d\d?)
[ ] (\w\w)
}x;
Я использовал такой код для разбора данных с датчиков погоды. Я использую этот формат, потому что он близко соответствует документации производителя. Это работает очень хорошо для форматов данных с «фиксированной шириной», которые не совсем соответствуют обещанию полей с фиксированной шириной (это очень печально на практике).
Вы можете утверждать, что я должен ставить пробелы в отдельных строках или в той же строке, что и предыдущее поле, а не в строке с последующим полем. Но это просто форматирование, и это действительно проблема для perltidy.
В других случаях я использовал такой код:
$foo =~ m{
( \d{4} )
[ ] ( \d{2,3} )
[ ] ( \w{2} )
}x;
Чтобы обеспечить читаемость вышеупомянутого, вам нужно добавить больше пробелов и поиграть с форматированием немного больше.
Второй стиль лучше масштабируется со сложностью - добавление пользовательских классов символов и широких полей не нарушает читабельность.
Самое главное, чтобы быть последовательным в рамках данного регулярного выражения. IOW, никогда не делай этого:
$foo =~ m{
( \d\d\d\d )
[ ] ( \d{2,3} )
[ ] ( \w\w )
}x;
В конечном итоге код выполняет две функции. Самая известная функция - это то, что она говорит компьютеру, что делать. Но самая важная, хотя и в значительной степени упускаемая из вида функция кода - сообщить программисту , что делает компьютер.