Поиск

Вопросы и ответы

Можно ли обойтись без функций substr, index и rindex? Для чего они вообще нужны, если практически все можно сделать с помощью регулярных выражений?

Во-первых, использование регулярных выражений для выполнения простых видов поиска и замены строк крайне неэффективно. Функции index и rindex работают значительно быстрее. Во-вторых, создание регулярных выражений для выполнения замены текста с фиксированной позиции в строке — это стрельба из пушки по воробьям; намного более элегантное решение — воспользоваться функцией substr. И, наконец, в-третьих, Perl относится к тому разряду языков программирования, где одну и ту же операцию можно выполнить разными средствами. Поэтому используйте то средство, которое вам больше нравится.

Что произойдет, если в качестве начальной позиции в функции substr (или index, или rindex) указать значение, выходящее за границы строки?

Чем мне всегда нравились компьютеры, так это их удивительной терпимостью к разного рода экспериментам. Вместо того чтобы задавать вопрос из серии "Что будет, если...?", иногда проще самому поэкспериментировать и посмотреть, что получится.

Возвращаясь к поставленному вопросу, стоит отметить, что обращение к несуществующей части строки приведет к появлению сообщения об ошибке use of undefined value (если включен режим выдачи предупреждений, а он у вас должен быть включен всегда!). При этом функция возвращает неопределенное значение. Например, при выполнении кода $a="Foo"; substr($a,5); функция substr возвращает значение undef.