如何使用$ _来存储我的字符串,然后使用另一个标量变量来存储替换字符串,以便我拥有这两个副本。我们是否有一个修饰符来复制另一个变量中的默认参数?
#! /usr/bin/perl/
use warnings;
use strict;
$_ = "X is a good boy. X works daily and goes to school. X studies for 12 hours daily \n";
s/X/Sam/g;
print $_, "\n";
我最终想要的是原始的$ _和替换的字符串。
编辑:我用过
my $new = s/X/Sam/gr
但是我收到了与构建相关的错误,并没有解决问题。我使用的是版本5.10.1
perl --version
This is perl, v5.10.1 (*) built for x86_64-linux-thread-multi
答案 0 :(得分:7)
当然,一种方法是首先复制原件并在副本上进行替换。
( my $new = $_ ) =~ s/X/Sam/g;
另一种方法是使用/r
修饰符(在v5.14中引入)。它返回新字符串,保留原始字符串
my $new = $_ =~ s/X/Sam/gr;
在子弹“ s / PATTERN / REPLACEMENT / msixpodualngcer ”下找到它in perlop。
注意示例中的有趣用法。使用/r
,您也可以
my $new = s/X/Sam/gr;
由于/r
修饰符在v5.14或更高版本上可用,您可能希望拥有use 5.014;
,不允许代码在较旧的Perls上运行并记录所需的版本。另一方面,如果没有旧的Perl上的那个,你会得到一个特定的错误,其中包含使用不可用功能的位置。
答案 1 :(得分:1)
尽可能不尝试将$ _用于其他任何东西,然后将其转换为另一个变量。我遇到了问题,在复杂的循环中,$ _会丢失。 它的四行代码可能不是特别雄辩,但是......
$orig = $_;
$changed = $_;
$changed = s/X/Sam/g;
print "CHANGED: ".$changed."\bORIGINAL: ".$orig\n";
答案 2 :(得分:1)
如果您需要与早于5.14的Perl版本兼容,则可以使用以下内容:
#! /usr/bin/perl/
use warnings;
use strict;
$_ = "X is a good boy. X works daily and goes to school. X studies for 12 hours daily \n";
my $m;
($m = $_)=~s/X/Sam/g;
print $m, "\n";
此处,$m
存储修改后的数据,$_
保持不变。