$loveStr =~ s/(l)ove/@{[$1 eq 'L'?'T':'t']}est/gi;
不知道你是不是要这个效果?

在 2011年2月25日 下午6:17,Achilles Xu <[email protected]>写道:

> 上面的方法也不是一无是处,可以先把foreach里的代码简化了。至于怎么一句实现,我再想想。
>
>
> $loveStr = q/love LOVE Love lOVe LOve loVE/;
>    print $loveStr."\n";
>    foreach my $en ($loveStr =~ m/love/ig) {
>         $en2 = $en;
>         $en2 =~ tr/loveLOVE/testTEST/;
>         $loveStr =~ s/$en/$en2/g;
>    }
>    print $loveStr."\n";
>
> 在 2011年2月25日 下午6:11,Achilles Xu <[email protected]>写道:
>
> 呵呵,上面这个是错的,一时没考虑清楚,手快给发了。我再想想。
>>
>> 在 2011年2月25日 下午6:10,Achilles Xu <[email protected]>写道:
>>
>> tr/loveLOVE/testTEST/;
>>>
>>> 在 2011年2月25日 下午3:22,Kermit <[email protected]>写道:
>>>
>>>  On Fri, 2011-02-25 at 15:11 +0800, Achilles Xu wrote:
>>>> > s/love/test/i;
>>>> >
>>>> > 最后的i表示不区分大小写
>>>>
>>>> 那样会把所有的大小写无关的love都换成小写的test, 我其实想要的是这样的效
>>>> 果:
>>>>
>>>>    $loveStr = q/love LOVE Love lOVe LOve loVE/;
>>>>    print $loveStr."\n";
>>>>    foreach my $en ($loveStr =~ m/love/ig) {
>>>>        if($en eq uc($en)) {
>>>>            $loveStr =~ s/$en/TEST/g;
>>>>        }elsif(substr($en,0,1) eq uc(substr($en,0,1))) {
>>>>            $loveStr =~ s/$en/Test/g;
>>>>        }else {
>>>>            $loveStr =~ s/$en/test/g;
>>>>        }
>>>>    }
>>>>    print $loveStr."\n";
>>>>
>>>> 运行输出:
>>>> love LOVE Love lOVe LOve loVE
>>>> test TEST Test test Test test
>>>>
>>>> 只不过上面写法太罗嗦,不知有没有更优雅,更Perl的写法?
>>>>
>>>> Thanks
>>>> B.R
>>>> Kermit
>>>>
>>>> >
>>>> > 在 2011年2月25日 下午2:17,Kermit <[email protected]>写道:
>>>> >         Dear all,
>>>> >
>>>> >         $loveStr = q/love Love LOVE lOVe LOVe/;
>>>> >
>>>> >         如果在emacs中编辑C/C++代码时,用"M-x replace-string love
>>>> >         test",
>>>> >         就会从
>>>> >         q/love Love LOVE lOVe LOVe/;
>>>> >         变为:
>>>> >         q/test Test TEST test Test/;
>>>> >
>>>> >         就是说能够识别开头的大写和全大写。这在Perl中有没有什么方式快捷
>>>> >         实现?
>>>> >
>>>> >         Thanks
>>>> >         B.R
>>>> >         Kermit
>>>> >
>>>> >
>>>> >
>>>> >
>>>> >
>>>> >         --
>>>> >         您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers
>>>> >         讨论组”论坛。
>>>> >         要向此网上论坛发帖,请发送电子邮件至
>>>> >         [email protected]。
>>>> >         要取消订阅此网上论坛,请发送电子邮件至 perlchina
>>>> >         [email protected]。
>>>> >         若有更多问题,请通过
>>>> >         http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论
>>>> >         坛。
>>>> >
>>>> >
>>>> >
>>>> >
>>>> > --
>>>> > ---------------------------
>>>> > Achilles Xu
>>>> >
>>>> >
>>>> >
>>>> > --
>>>>  > 您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论
>>>> > 组”论坛。
>>>> > 要向此网上论坛发帖,请发送电子邮件至 [email protected]。
>>>> > 要取消订阅此网上论坛,请发送电子邮件至 perlchina
>>>> > [email protected]。
>>>> > 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN
>>>> > 访问此网上论坛。
>>>>
>>>>
>>>> --
>>>> 您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。
>>>> 要向此网上论坛发帖,请发送电子邮件至 [email protected]。
>>>> 要取消订阅此网上论坛,请发送电子邮件至 [email protected]。
>>>> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
>>>>
>>>>
>>>
>>>
>>> --
>>> ---------------------------
>>> Achilles Xu
>>>
>>>
>>
>>
>> --
>> ---------------------------
>> Achilles Xu
>>
>>
>
>
> --
> ---------------------------
> Achilles Xu
>
>  --
> 您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。
> 要向此网上论坛发帖,请发送电子邮件至 [email protected]。
> 要取消订阅此网上论坛,请发送电子邮件至 [email protected]。
> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
>

-- 
您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。
要向此网上论坛发帖,请发送电子邮件至 [email protected]。
要取消订阅此网上论坛,请发送电子邮件至 [email protected]。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。

回复