PERL: БИБЛИОТЕКА ПРОГРАММИСТА


PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 40


print Sstring;

This is what you have

substr($stnng, 5, 2) = "wasn't"; # заменить "is" на "wasn't"

This wasn't what you have

substr($string, -12) = "ondrous"; # "This wasn't wondrous"

This wasn't wondrous

substr($string, 0, 1) = "";     # Удалить первый символ

his wasn't wondrous


30   Глава 1 • Строки

substr($string,   -10) =  '   ,           # Удалить последние 10 символов

his   wasn'

Применяя оператор =" в сочетании с операторами s///, m// или tr///, можно заставить их работать только с определенной частью строки:

# =~ применяется для поиска по шаблону if (substr($stnng,   -10) =" /pattern/)  {

print    Pattern matches in last 10 characters'^ ',

# подставить "at" вместо 'is', ограничиваясь первыми пятью символами
substr($string, 0, 5) =" s/is/at/g,

Более того, подстроки даже можно поменять местами, используя с каждой сто­роны присваивания несколько вызовов substr:

# Поменять местами первый и последний символ строки
$а = make a hat ,

(substr($a,0,1), substr($a,-1)) = (substr($a.-1), substr($a,0,1)); print $a, take a ham

Хотя функция unpack не является левосторонней, она работает значительно быстрее substr, особенно при одновременном извлечении нескольких величин. В отличие от substr она не поддерживает непосредственные смещения. Вместо это­го символ х нижнего регистра с числом пропускает заданное количество байт в прямом направлении, а символ ' X ' верхнего регистра — в обратном направлении.

#  Извлечение подстроки функцией unpack
$а = ' То be or not to be ,

$b = unpack( хб А6  ,   $a),   tt Пропустить 6 символов,   прочитать 6 символов print $b; or  not

($b,   $c)  = unpack(  хб A2 X5 A2',   $a),   # Вперед 6,   прочитать 2,

# назад 5,   прочитать 2 print   '$b\n$c\n"; or be

Иногда строка «режется» на части в определенных позициях. Предположим, вам захотелось установить позиции разреза перед символами 8, 14, 20, 26 и 30 — в каждом из перечисленных столбцов начинается новое поле. В принципе можно вычислить форматную строку unpack - 'А7 А6 А6 А4 А*", но программист на Perl по природе ленив и не желает попусту напрягаться. Пусть за него работает Per]. Воспользуйтесь приведенной ниже функцией cut2fmt.




Начало  Назад  Вперед