Может кто-нибудь объяснить мне это регулярное выражение - PullRequest
0 голосов
/ 29 февраля 2012

Мне бы хотелось понять это выражение, означающее.

$req_msg =~ s/ \${$toReplace}/$replacements->{$toReplace}/g;

Ответы [ 3 ]

4 голосов
/ 29 февраля 2012

Необходимым условием для этого являются две переменные:

  • $toReplace - содержит произвольное значение
  • $replacements - ссылка на HASH с заменами

Учитывая, что $toReplace содержит "foo", в содержимом $req_msq ищется ${foo} (с одним начальным пробелом), при каждом его замене на $replacements->{foo}.

2 голосов
/ 29 февраля 2012

$ req_msg = ~ s / \ $ {$ toReplace} / $ replacements -> {$ toReplace} / g;

s используется для замещения. $content=~ s/old_value/new_value/modifier; (модификатор может быть i, g, x, вместе или в комбинации)

Пример:

$content = "Hi I am a coder and I like coding very much!";
$content =~ s/i/eye/i;

теперь в содержимом $ будет "Heye eye am кодировщик и очень похожий кодировщик"

Точно так же $ {$ toReplace}, который просто означает, что скалярная ссылка - это старое значение, которое необходимо заменить, а $ replacements -> {$ toReplace} означает, что $ replaceings - это ссылка на хеш, ключ которой - $ toReplace. Это похоже на $ hash_value = hash_ref -> {key};

Где бы он ни находил значение, возвращаемое скалярной ссылкой, получает замену ключом хеш-ссылки на соответствующее значение, найденное в $ req_msg

Но я думаю, вы задали этот вопрос, потому что получили пустую замену Это может быть связано со скалярной справочной проблемой.

Этот фрагмент кода может помочь устранить ваши сомнения.

#!/usr/bin/perl
use strict;
use warnings;

my $value = "Jassi";
my $scalar_ref = \$value;

print "scalar_ref = $scalar_ref \n and value = $value and ${$scalar_ref}\n";
my %hash = ("Jassi", "aliencoders");
my $hash_ref = \%hash;
my $reg_msg = "Hi this is Jassi";
print "reg_msg = $reg_msg \n";
$reg_msg =~ s/${$scalar_ref}/$hash_ref->{${$scalar_ref}}/;
print "reg_msg after s = $reg_msg\n";

Смотрите вторую последнюю строку!

0 голосов
/ 29 февраля 2012

Он заменяет каждое вхождение текста ${blabla} тем, что хранится в хэш-ссылке $replacements с ключом blabla, например:

$replacements = { 'blabla' => 'blubb' };

будет производить замену каждого ${blabla}на blubb в $req_msg.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...