Не используйте строки для построения регулярных выражений, используйте qr//
. Есть одно важное отличие :при объединении двух регулярных выражений, созданных qr//
, каждое из них сначала оборачивается (?:...)
. Когда две строки объединяются, вы просто получаете строку, содержащую первую строку, за которой следует вторая. Но $base
содержит символ вертикальной черты, диапазон которого будет ограничен закрывающим (?:...)
. См.
my $s = "A',";
my $r = 'A|\{';
print $s =~ $_ ? 1 : 0
for qr/$r,/, # 1
qr/(?:$r),/; # 0
Кроме того, использование переменной, содержащей имя переменной, не интерполирует вторую переменную в регулярном выражении, происходит только один уровень интерполяции:
my $r = 'A';
my $s = '$r';
print "A" =~ /$s/; # Doesn't match.
Более того, \1
в строке в двойных кавычках (и замена в подстановке ведет себя как строка в двойных кавычках )означает chr(1)
.Perl использует $1
для ссылки на первую подходящую группу. Но опять же, использование переменной, содержащей $1
, не расширит ее, так как происходит только один уровень интерполяции.
my $s = 'ABC';
my $r = '$1';
say $s =~ s/(A)BC/$r/r; # $1
Вы можете использовать модификатор /ee
для принудительной второй интерполяции, но тогда замещающая часть должна быть синтаксически написана на языке Perl, например.
my $s = 'ABC';
my $r = '"(". $1. ")"';
say $s =~ s/A(B)C/$r/ree; # (B)
Хорошо, после половины --часа RTFM я нашел решение.
Все на хосте докера:
docker network ls | grep my-restricted-network
38d3c24a48ad my-restricted-network bridge local
iptables -I DOCKER-USER -i br-38d3c24a48ad -j DROP
iptables -I DOCKER-USER -i br-38d3c24a48ad -d 192.168.1.150 -j ACCEPT
iptables -I DOCKER-USER -i br-38d3c24a48ad -d <static_ip> -j ACCEPT