替换并存储在另一个标量中

时间:2017-02-22 08:28:06

标签: regex 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";

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

3 个答案:

答案 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存储修改后的数据,$_保持不变。