Регулярные выражения можно использовать для разбивки строки на поля. Это делает функция split. Функция join выполняет противоположное действие — вновь "склеивает" эти кусочки.
Функция split
Функция split получает регулярное выражение и строку и ищет в этой строке все экземпляры указанного регулярного выражения. Те части строки, которые не совпадают с регулярным выражением, возвращаются по порядку как список значений. Вот, например, код синтаксического анализа разделенных двоеточиями полей, аналогичных тем, которые используются в UNIX-файлах /etc/passwd:
$line =
"merlyn::118:10:Randal:/home/merlyn:/usr/bin/peri";
@fields = split (/:/,$line); # разбить $line, используя в качестве t разделителя двоеточие
# теперь @fields содержит ("merlyn","","118","10",
# "Randal","/home/merlyn","/usr/bin/peri")
Обратите внимание на то, что второе пустое поле стало пустой строкой. Если вы этого не хотите, задайте сопоставление следующим образом:
Sfields = split(/:+/, $line);
Здесь при сопоставлении принимаются во внимание одно и более расположенных рядом двоеточий, поэтому пустое поле не образуется.
Очень часто приходится разбивать на поля значение переменной $_, поэтому этот случай предлагается по умолчанию:
$ = "some string";
Swords = split (/ /); # то же самое, что и Swords = split(/ /, $_); *
# Или две пары, если используется символ из пары "левая-правая".
При такой разбивке соседние пробелы в разбиваемой строке вызовут появление пустых полей (пустых строк). Лучше использовать образец / +/, а лучше /\s+/, который соответствует одному и более пробельным символам. Этот образец, по сути дела, используется по умолчанию*, поэтому, если вы разбиваете переменную $_ по пробельным символам, вы можете использовать все стандартные значения и просто написать :
Swords = split; # то же самое, что и (Swords = split(/\s+/, $_) ;
Завершающие строки пустые поля в список, как правило, не включаются. Особой роли это обычно не играет. Решение вроде