Если бы я был:Как вставить текст в строку в Perl?
$foo= "12."bar bar bar"|three";
как бы вставить в текст «..» после текста 12 в переменной?
Если бы я был:Как вставить текст в строку в Perl?
$foo= "12."bar bar bar"|three";
как бы вставить в текст «..» после текста 12 в переменной?
Perl позволяет выбрать собственные разделители кавычек. Если вы обнаружите, что вам нужно использовать двойную кавычку внутри интерполирующей строки (то есть ""
) или одинарной кавычки внутри неинтерполируемой строки (то есть ''
), вы можете использовать quote operator, чтобы указать другой символ, который будет действовать как разделитель для строка. Разделители бывают двух форм: в квадратных скобках и без фиксации. Ограничители в квадратных скобках имеют разные начальные и конечные символы: []
, {}
, ()
, []
и <>
. Все остальные символы *
доступны в виде разблокированных разделителей.
Так что ваш пример может быть записан в виде
$foo = qq(12."bar bar bar"|three);
Вставка текста после того, как "12." может быть сделано многими способами (TIMTOWDI). Общим решением является использование substitution в соответствии с текстом, который вы хотите заменить.
$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";
*
все символы, кроме пробельных символов (пробел, табуляция, возврат каретки, линия, вертикальная табуляция и Под.стр), что является
Если вы продолжаете писать ответы на это подробно (и учитывая, насколько вы заняты в списке почтовых отправлений Perl Beginners), я сомневаюсь, что вы сделаете какую-либо работу вообще. К счастью, у SO нет большого объема вопросов Perl ... – Telemachus
Хе-хе, вы можете заметить, что они могут посещать PB-воски и ослабевать. Я, как правило, ухожу в PB, когда мне либо мало что нужно делать, либо я настолько расстроен, что в любом случае я ничего не могу сделать. Все это является частью моей подготовки, чтобы быть тренером (вот почему я перехожу к гипер-подробным ответам). –
Это чертовски ответ. – SquareCog
Если вы хотите использовать двойные кавычки в строку в Perl есть два основных варианта:
$foo = "12.\"bar bar bar\"|three";
или:
$foo = '12."bar bar bar"|three';
Первый вариант экранирует кавычки внутри строки с обратной косой черты.
Второй вариант использует одинарные кавычки. Это означает, что двойные кавычки рассматриваются как часть строки. Однако в одинарных кавычках все буквально, поэтому $var
или @array
не рассматривается как переменная. Например:
$myvar = 123;
$mystring = '"$myvar"';
print $mystring;
> "$myvar"
Но:
$myvar = 123;
$mystring = "\"$myvar\"";
print $mystring;
> "123"
Есть также большое количество другой Quote-like Operators вы могли бы использовать вместо этого.
$foo = "12.\"bar bar bar\"|three";
$foo =~s/12\./12\.\.\./;
print $foo; # results in 12...\"bar bar bar\"|three"
Вопрос не совсем понятно. Я не уверен, что вы пытаетесь сделать. –
Что именно вы думаете в вашей переменной $ foo сейчас? Вы пытались запустить это с включенными предупреждениями? – Telemachus