Вниманию перловщиков
Jun. 3rd, 2021 04:15 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Обнаружил "фичу" в Perl'е.
Если в тексте программы надо написать какую-то строковую величину, можно использовать примерно три вида кавычек:
"строка"
'строка'
/строка/
Причем в описании указано, что в одинарных кавычках последовательность символов используется as is.
Последовательность символов из двойных кавычек может быть использована и как спецсимвол т.н. регулярного выражения (*).
Например "\n" - это не косая черта и буковка n, а символ новой строки, 0A.
Чтобы вернуть этому буквосочетанию тривиальное значение, надо перед спецсимволом поставить обратную косую черту:
"\\n" эквивалентно '\n'.
Примерно так же обрабатывается строка между слэшей /../
Обнаружилось досадное исключение:
вертикальная черта | даже в одинарных кавычках обрабатывается как спецсимвол.
Вот тестовый скрипт, в котором это демонстрируется.
Запускаем и
видим, что строка разбивается не на массив из 16 элементов, последний из которых - 14, а тупо на массив отдельных символов. То есть конструкция '|' в составе функции split - это регулярное выражение. Хотя другие функции строки в одинарных кавычках обрабатывают корректно.
От така х..ня, малята !
* Тут, как и много где, путаница. Регулярный - это обычный. Обратная косая черта как раз обязывает сначала проверить не является ли это спец-, т.е. особым, необычным символом.
Если в тексте программы надо написать какую-то строковую величину, можно использовать примерно три вида кавычек:
"строка"
'строка'
/строка/
Причем в описании указано, что в одинарных кавычках последовательность символов используется as is.
Последовательность символов из двойных кавычек может быть использована и как спецсимвол т.н. регулярного выражения (*).
Например "\n" - это не косая черта и буковка n, а символ новой строки, 0A.
Чтобы вернуть этому буквосочетанию тривиальное значение, надо перед спецсимволом поставить обратную косую черту:
"\\n" эквивалентно '\n'.
Примерно так же обрабатывается строка между слэшей /../
Обнаружилось досадное исключение:
вертикальная черта | даже в одинарных кавычках обрабатывается как спецсимвол.
Вот тестовый скрипт, в котором это демонстрируется.
$a = '1|2|0|0|0|0|0|0|0|0|0|0|0|0|0|14'; @m = split '|', $a ; $elementov_v_massive = @m ; print $elementov_v_massive, "\n" ; print $m[29], "\n"; print $m[30], "\n"; print $m[31], "\n\n"; print '\n77\n', "\n55\n"; exit ;
Запускаем и
perl /tmp/test.pl 32 | 1 4 \n77\n 55 me@my-desktop:~$
видим, что строка разбивается не на массив из 16 элементов, последний из которых - 14, а тупо на массив отдельных символов. То есть конструкция '|' в составе функции split - это регулярное выражение. Хотя другие функции строки в одинарных кавычках обрабатывают корректно.
От така х..ня, малята !
* Тут, как и много где, путаница. Регулярный - это обычный. Обратная косая черта как раз обязывает сначала проверить не является ли это спец-, т.е. особым, необычным символом.