Глава 2: Скалярные данные.
2.4 Скалярные операции и функции
2.4.3 Функции chop и chomp
Весьма полезной иногда бывает встроенная функция chop. Эта функция принимает один аргумент, указываемый в круглых скобках — имя скалярной переменной — и удаляет из строкового значения этой переменной последний символ. Например:
$х = "hello world";
chop($x); # $x теперь имеет значение "hello worl"
Обратите внимание: значение аргумента здесь меняется, отсюда и требование к наличию скалярной переменной, а не просто скалярного значения. Писать chop (' suey'), чтобы превратить аргумент в 'sue', не имеет смысла, потому что места для хранения этого значения нет. Кроме того, можно ведь и просто написать: ' sue '.
Возвращаемое значение для этой функции — отброшенный символ (в приведенном выше примере с "hello world" это буква d). Следующий код, очевидно, неверен:
$х = chop($x); # НЕВЕРНО: заменяет $х ее последним символом
chop($x); # ВЕРНО: как и выше, удаляет последний символ
Если в функции chop задать пустую строку, то она ничего не сделает и ничего не возвратит, не выдавая сообщения об ошибке и вообще никак не реагируя*. Большинство операций в Perl имеют разумные граничные условия; другими словами, вы можете использовать их в пределах накладываемых ограничений и за ними, причем часто без какой-либо реакции с их стороны. Некоторые утверждают, что это один из фундаментальных недостатков Perl, а другие пишут первоклассные программы, нисколько не утруждая себя заботой о соблюдении этих ограничений. Вам решать, к какому лагерю присоединяться.
При усечении уже усеченной строки отбрасывается еще один символ. Например:
$а = "hello world\n";
chop $a; # теперь $а имеет значение "hello world"
chop $a; # оп-ля! теперь $а имеет значение "hello worl"
Если вы не уверены в том, есть ли в конце переменной символ новой строки, можете использовать несколько более безопасную операцию chomp, которая удаляет только символ новой строки**, например:
$а == "hello world\n";
chomp ($a); # теперь $а имеет значение "hello world"
chomp ($a); # ага ! никаких изменений в $а не произошло
* Если вы не используете соответствующий здравому смыслу ключ -w.
** Или иное значение, которое задано переменной $ \ в качестве разделителя входных записей.
Назад | Вперед
Содержание (общее) | Содержание раздела | Содержание подраздела
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|