尝试修改只读值时出错

  • 本文关键字:出错 只读 修改 perl
  • 更新时间 :
  • 英文 :


我正在尝试从数据库中选择以下值:

报告说,@its许多问题之一是recent@延长 女装销售下滑,这家七家门店的零售商表示将 在其所有商店开始为期三个月的清算销售~(A)其 最近有很多问题~(B)它的很多问题都是 最近~(C)它的很多问题是最近~(D)他们的很多问题 是最近的~(E)他们的很多问题都是最近的~

我在变量 $ques 中选择此值,然后选择一个文本,如下所示:

$ques=~s/^(.*?)@(.*?)@(.*?)$/$2/;

现在,在将字符串中的 ~ 字符替换为

$3=~s/~/n/g;    ---->line 171

并运行脚本,我收到一个错误,如下所示:

Modification of a read-only value attempted at main.pl line 171

我想将所有 ~ 字符替换为""并打印最终值。请建议如何做。

*我在网上对此进行了研究,但对如何处理这些只读变量感到困惑。

你已经从何塞·卡斯特罗那里得到了很好的解释。但是,如果您使用的是最新版本的Perl,还有另一种解决方案(更新:经过更仔细的检查,我发现这意味着5.14+)。替换运算符的 /r 参数将复制字符串,在副本上进行替换,然后返回更改后的值。

所以你可以写:

my $new_value = $3 =~ s/~/n/rg;

听起来在这种情况下,您真正想要的是拆分而不是正则表达式捕获组:

my @parts = split(/@/, $ques);
$parts[2] =~ s/~/n/g;

它使您的代码意图更加清晰,因为您实际上是在@符号上进行拆分。

就像你说的,特殊变量$1$2等都是只读的,这意味着你不能对它们执行这种替换。

$ques执行替换将满足您的需求:

$ques =~ s/~/n/g;
print $ques;

请注意,在你执行的早期替换中,$ques你正在删除所有~字符。

最新更新