您需要使用的,而不是tr///
s///
運營商是無法與新詞來替換詞。
第一個意思是「替代」:它用於用某些其他文本替換文本的某些部分(由給定模式匹配)。例如:
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', '一個' 成爲 'O',並轉化到 'G' 'T' 置換。很酷,對。 )
This part的Perl文檔會帶來更多的啓發。 )
P.S.這是你的腳本的主要邏輯問題,但還有其他幾個。首先,您需要從輸入字符串中刪除末尾符號(chomp
):否則該模式可能永遠不會匹配。
其次,你應該在s///
表達的第一部分\Q...\E
序列代替quotemeta
電話,但是從第二乾脆放棄它(就像我們文字,而不是一個模式取代)。
最後,我強烈建議開始使用詞法變量而不是全局變量 - 並儘可能將它們聲明爲儘可能接近它們的使用位置。
因此變得接近這一點:
# 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";