您需要使用s///
运算符而不是tr///
.
第一个表示“替换”:它用于将文本的某些部分(与给定模式匹配)替换为其他文本。例如:
my $x = 'cat sat on the wall';
$x =~ s/cat/dog/;
print $x; # dog sat on the wall
第二个意思是“音译”:它用于将某个范围的符号替换为另一个范围。
my $x = 'cat sat on the wall';
$x =~ tr/cat/dog/;
print $x; # dog sog on ghe woll;
这里发生的情况是所有的 'c' 都被 'd' 取代,'a' 变成了 'o' 并且 't' 变成了 'g'。很酷,对吧。)
这部分Perl 文档会带来更多的启示。)
PS 这是您脚本的主要逻辑问题,但还有其他几个问题。
首先,您需要从输入字符串中删除结束符 ( chomp
):否则该模式可能永远不会匹配。
其次,您应该在表达式的第一部分将quotemeta
call替换为 sequence ,但从第二部分完全删除它(因为我们替换为text,而不是模式)。\Q...\E
s///
最后,我强烈建议开始使用词法变量而不是全局变量——并尽可能将它们声明为接近它们的使用位置。
所以它变得接近这个:
# these two directives would bring joy and happiness in your Perl life!
use strict;
use warnings;
my $original = "\nThe cat is on the tree";
print $original;
print "\nEnter the word that want to replace: ";
chomp(my $word_to_replace = <>);
print $word_to_replace, "\n";
print "\nEnter the new word for string: ";
chomp(my $replacement = <>);
print $replacement, "\n";
$original =~ s/\Q$word_to_replace\E/$replacement/;
print "The result is:\n$original";