初学perl 被一简单的程序困惑

初学perl 被一简单的程序困惑

本人初学perl 被一简单的程序困惑 还请同志们指点

写一个模式,它能匹配$what 当前的内容的3 份连续拷贝。也就是说,如果$what 为fred
,则此模式能匹配fredfredfred。
如果$what 为fred|barney,则此模式能匹配fredfredbarney, barneyfredfred, barneyb
arneybarney,或者其它的变种。(提示:
你应当在程序的顶端设置$what 的值,如my $what = ‘fred|barney’;)


我写的代码是:
#!usr/bin/perl
use warnings;
use strict;
my $what = 'fred';
$what =~ s/$what{3}/$what;
print "$what.\n";

总是报错:Substitution replacement not terminated at ex9_1 line 5.

不太知道究竟是哪个地方写错了


QUOTE:
原帖由 308happy 于 2008-7-31 10:42 发表
本人初学perl 被一简单的程序困惑 还请同志们指点

写一个模式,它能匹配$what 当前的内容的3 份连续拷贝。也就是说,如果$what 为fred
,则此模式能匹配fredfredfred。
如果$what 为fred|barney,则此模式 ...

哈哈哈 我知道这是小骆驼上的练习题
呵呵 是啊 不过答案就一行代码 不明白啊


QUOTE:
原帖由 308happy 于 2008-7-31 10:52 发表
呵呵 是啊 不过答案就一行代码 不明白啊

有答案么 没看到 写出来看看
答案写的是
/($what){3}/


QUOTE:
原帖由 308happy 于 2008-7-31 10:58 发表
答案写的是
/($what){3}/

呵呵 我也挺好奇 为啥你的 $what =~ s/$what{3}/$what; 后面为啥要多个$what
我就是想用替换 把之前的$what替换成$what{3}
不过就是用答案的这个 我还是没运行成功的
还请guijia8427 指点~
在替换部分可使用模式次序变量$n,如$n,如s/(\d+)/[$1]/,但在替换部分不支持模式的特殊字符,如{},*,+等


QUOTE:
原帖由 308happy 于 2008-7-31 11:07 发表
我就是想用替换 把之前的$what替换成$what{3}
不过就是用答案的这个 我还是没运行成功的
还请guijia8427 指点~

$str =~/($what){3}/;   可以啊  我试过行啊
#!/usr/bin/perl
use warnings;
use strict;
my $str="fredfredfreddkkd";
my $what = 'fred';
$str =~/($what){3}/;
print $&;

输出
fredfredfred

(A|B){1,3}