Вы можете указать предельный аргумент для оператора split
, чтобы Perl прекратил расщепление после генерации определенного количества токенов.
@fields = split /\s+/, $expression, 4
Например,
поместит все после 3-го поля, разделенного пробелами, в 4-й элемент @list
. Это более эффективно, чем выполнение полного разбиения, когда выражение имеет более четырех полей.
Если вы сделаете этот ленивый сплит и решите, что вам нужно обработать строку дальше, вам потребуется split
строка снова. В зависимости от того, насколько длинны строки и как часто вам нужно их обрабатывать, вы все равно можете выйти вперед.
Другим подходом может быть разбиение части интересующей вас строки. Например, если строка содержит много полей, но вы хотите отфильтровать 4-е поле И вы уверены, что 4-е поле всегда происходит до 100-го байт в строке, говорящий
@fields = split /\s+/, substr($expression, 0, 100);
if (matches_some_condition($line[3])) {
# process the whole line
@fields = split /\s+/, $expression;
...
}
и иногда разделение выражения дважды может быть более эффективным, чем разделение полного выражения один раз.