У программиста в файле хранилась таблица:
Программисту понадобилось удалить последнюю колонку в этой таблице, и он попробовал сделать это с помощью Perl-однострочника:
Но…
В новом файле оказалась полная чушь:
Функция split в качестве первого параметра принимает не просто строку, но регулярное выражение.
Проблема в символе “ | ”, по которому программист пытается разбить строку на поля. |
Так как первый параметр split’а – регулярное выражение, split '|', $str
работает так же, как split m/|/, $str
, или split m//, $str
, или split '', $str
Ну а split по пустому регулярному выражению разбивает строку на отдельные символы. Так что
split "|", "|Alan|blue"
дает список ("|", "A", "l", "a", "n", "|", "b", "l", "u", "e")
, и потом эти списки символов просто были склеены через “|”.
Хорошим вариантом было бы квотировать спецсимволы:
Или можно воспользоваться автоматическим разбиением входных строк, которое включается параметром -a
(разделитель для split’а указывается ключом -F
):