$string_with_meta = '\n \032 \x00 text \t \v "';
$quoted = quotemeta($string_with_meta);
# в $quoted будет '\\n\ \\032\ \\x00\ text\ \\t\ \\v\ \"'
В Perl имеется несколько функций преобразования строкового представления числа в числовое значение. Функция hex() возвращает десятичное значение выражения, представленного как шестнадцатиричное число в виде строки:
$hexadecimal_as_string = '0x2F';
$decimal_number = hex($hexadecimal_as_string); # будет 47
Функция oct() возвращает десятичное значение строкового выражения, представляющего запись восьмеричного числа:
$octal_as_string = '0777';
$decimal_number = oct($octal_as_string); # будет 511
С помощью oct() можно также преобразовать к десятичному значению двоичное или шестнадцатиричное число, записанное в виде строки:
$binary_as_string = '0b011001';
$decimal_number = oct($binary_as_string); # будет 25
$hexadecimal_as_string = '0x19';
$decimal_number = oct($hexadecimal_as_string); # будет 25
Ну а строку, содержащую число в десятичной системе счисления, можно преобразовать к числу, поместив ее в числовой контекст:
$pi_as_string = '3.141592653'; # число Пи в виде строки
$circle_length = 2 * $pi_as_string * $radius;
Функция sprintf() возвращает строку, которая сформирована в соответствии с правилами форматирования, заимствованными из языка C: на основе формата преобразования, заданного первым аргументом, в результирующую строку подставляются отформатированные значения из списка остальных аргументов функции. В общем виде вызов этой функции выглядит так: sprintf(ФОРМАТ, СПИСОК АРГУМЕНТОВ). В формате преобразования располагается любой текст, в котором могут присутствовать указания преобразования. Каждое указание начинается с символа процента (%) и заканчивается символом, определяющим преобразование. Основные преобразования приведены в таблице 7.2.
Таблица 7.2. Преобразования в формате sprintf
Преобразование | Синоним | Результат преобразования | Мнемоника символа |
---|---|---|---|
%% | Знак процента | % | |
%c | Символ с указанным номером в кодовой таблице | Character | |
%s | Строка | String | |
%d | %i | Целое со знаком в десятичном виде | Decimal, Integer |
%u | Целое без знака в десятичном виде | Unsigned | |
%b | Целое без знака в двоичном виде | Binary | |
%o | Целое без знака в восьмеричном виде | Octal | |
%x | %X | Целое без знака в шестнадцатеричном виде | heXadecimal |
%e | %E | Целое с плавающей точкой в научной нотации | Exponential |
%f | %F | Число с плавающей точкой в виде десятичной дроби | Float |
%g | %G | Число с плавающей точкой в формате %e или %f |
Между знаком процента и символом в указании преобразования можно использовать дополнительные параметры преобразования, основные из которых приведены в таблице 7.3.
Таблица 7.3. Параметры преобразования в формате sprintf
Параметр | Выполняемое форматирование | Пример параметров sprintf() | Результат форматирования |
---|---|---|---|
число | Минимальная ширина поля вывода для результата преобразования; если она не задана или меньше ширины значения, то устанавливается равной ширине выводимого значения | '<%5s>', 25 | < 25> |
.число | Количество цифр после десятичной точки в дробном числе | '<%.5f>', 0.25 | <0.25000> |
Максимальная ширина поля вывода, до которой усекается длинная строка | '<%.5s>', '5' x 10 | <55555> | |
пробел | Вывод пробела перед положительным числом | '<% d>', 25 | '< 25>' |
+ | Вывод плюса перед положительным числом | '<%+d>', 25 | '<+25>' |
0 | Вывод нулей, а не пробелов при выравнивании по правому краю поля | '<%05s>', 25 | '<00025>' |
- | Выравнивание значения по левому краю поля | <%-5s>, 25 | '<25 >' |
# | Вывод перед восьмеричным числом 0, перед шестнадцатеричным числом 0x, перед двоичным числом 0b | '<%#x>',25 | '<0x19>' |
При выполнении sprintf() к очередному значению из списка аргументов применяется преобразование, результат которого вставляется в форматирующую строку на место указания преобразования. Например, если шаблон форматирования и аргументы функции sprintf() заданы так: