Perl позволяет вам выбирать свои собственные разделители цитат. Если вам нужно использовать двойную кавычку внутри интерполирующей строки (например, ""
) или одинарную кавычку внутри неинтерполирующей строки (например, ''
), вы можете использовать оператор кавычки для укажите другой символ, который будет действовать в качестве разделителя строки. Разделители бывают двух видов: в скобках и без скобок. Ограничители в скобках имеют разные начальные и конечные символы: []
, {}
, ()
, []
и <>
. Все остальные символы *
доступны в качестве разделителей без скобок.
Таким образом, ваш пример может быть записан как
$foo = qq(12."bar bar bar"|three);
Вставка текста после «12». можно сделать разными способами ( TIMTOWDI ). Распространенным решением является использование подстановки для соответствия тексту, который вы хотите заменить.
$foo =~ s/^(12[.])/$1../;
^ означает совпадение в начале строки, ()
означает захват этого текста в переменную $1
, 12
просто соответствует строке "12"
, а []
означает соответствие любому персонажей внутри скобок. Скобки используются потому, что .
имеет особое значение в регулярных выражениях в целом, но не внутри класса символов ([]
). Другой вариант для класса символов - это исключить специальное значение .
с \
, но многие люди считают, что это уродливее, чем класс символов.
$foo =~ s/^(12\.)/$1../;
Другой способ вставить текст в строку - присвоить значение для вызова substr
. Это подчеркивает одну из довольно уникальных особенностей Perl: многие из его функций могут выступать в качестве lvalues. То есть они могут рассматриваться как переменные.
substr($foo, 3, 0) = "..";
Если вы еще не знали, где "12."
существует в строке, вы можете использовать index
, чтобы найти, где она начинается, length
, чтобы узнать, как долго " 12.» и затем используйте эту информацию с substr
.
Вот полнофункциональный Perl-скрипт, содержащий приведенный выше код.
#!/usr/bin/perl
use strict;
use warnings;
my $foo = my $bar = qq(12."bar bar bar"|three);
$foo =~ s/(12[.])/$1../;
my $i = index($bar, "12.") + length "12.";
substr($bar, $i, 0) = "..";
print "foo is $foo\nbar is $bar\n";
*
все символы, кроме пробельных символов (пробел, табуляция, возврат каретки, перевод строки, вертикальная табуляция и подача формы), то есть