我正在尝试从数据库中选择以下值:
报告说,@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
你正在删除所有~
字符。