Perl s / $ array [1] \ b / $ array [1] не заменит - PullRequest
0 голосов
/ 30 сентября 2019

Я хотел бы заменить строку $ array [1] на фактическое значение переменной. \ b, похоже, не работает Кто-нибудь знает, как заменить переменную массива? Что такое разделитель?

s / $ array [1] \ b / $ array [1]

Ответы [ 2 ]

2 голосов
/ 30 сентября 2019

Значение [ ... ] имеет особое значение в регулярных выражениях (оно определяет «класс символов»). Если вы хотите использовать [ для обозначения [, то вам нужно экранировать его с помощью \.

s/\$array\[1]/$array[1]/

Обновление: Добавлен экранирование к $,Удалено \b.

1 голос
/ 30 сентября 2019

Я бы порекомендовал настоящий шаблонизатор для выполнения такой замены, это позволит вам распространить его на вещи, которые не выглядят точно так же, как $array[1], не усложняя его, но вам нужно будет изменить свой ввод начто ожидает шаблонизаторОдин из вариантов: Text :: Template .

use strict;
use warnings;
use Text::Template 'fill_in_string';

my $input = 'foo {$array[1]} bar';
my @array = 1..10;
my $rendered = fill_in_string $input, HASH => {array => \@array};
print $rendered, "\n"; # foo 2 bar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...