0

以下程序不起作用。我无法使用变量将单词替换为新单词(用户输入)

#Perl program that replace word with given word in the string
$str="\nThe cat is on the tree";
print $str;
print "\nEnter the word that want to replace";
$s1=<>;
print $s1;
print "\nEnter the new word for string";
$s2=<>;
print $s2;
$str=~ tr/quotemeta($s1)/quotemeta($s2)/;
print $str
4

3 回答 3

3

您需要使用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):否则该模式可能永远不会匹配。

其次,您应该在表达式的第一部分将quotemetacall替换为 sequence ,但从第二部分完全删除它(因为我们替换为text,而不是模式)。\Q...\Es///

最后,我强烈建议开始使用词法变量而不是全局变量——并尽可能将它们声明为接近它们的使用位置。

所以它变得接近这个:

# 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";
于 2012-09-04T06:41:07.360 回答
0

尝试以下操作:

$what = 'server'; # The word to be replaced
$with = 'file';   # Replacement
s/(?<=\${)$what(?=[^}]*})/$with/g;
于 2012-09-04T06:43:46.663 回答
0
#Perl program that replace word with given word in the string
$str="\nThe cat is on the tree";
print $str;
print "\nEnter the word that want to replace";
chomp($s1=<>);
print $s1;
print "\nEnter the new word for string";
chomp($s2=<>);
print $s2;
$str=~ s/\Q$s1\E/\Q$s2\E/;
print $str;
于 2012-09-04T06:44:55.393 回答