Ну, во-первых, вы определяете %replacememts
и пытаетесь использовать %replacements
. Вот почему вы должны всегда use strict
и use warnings 'all'
наверху каждой написанной вами Perl-программы без исключения. Затем вам нужно будет объявить каждую из ваших переменных с my
как можно позже (не просто помещать большой блок объявлений вверху)
В конце концов, у вас правильная идея, но первым параметром для подстановки должен быть шаблон регулярного выражения. Он будет интерполировать переменные Perl, поэтому он работал, когда вы использовали массив, но вы не можете просто использовать произвольное выражение Perl
Вам необходимо встроить шаблон регулярных выражений в переменную и использовать эту переменную в подстановке. Как это. Так же намного понятнее
use strict;
use warnings 'all';
my $sentence = 'dog cat';
my %replacements = ( dog => 'wolf', cat => 'tiger' );
my $re = join '|', keys %replacements;
(my $val = $sentence) =~ s/($re)/$replacements{$1}/g;
print "$val\n";
выход
wolf tiger