首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试修改只读值的错误

尝试修改只读值的错误
EN

Stack Overflow用户
提问于 2016-03-04 11:55:14
回答 3查看 553关注 0票数 1

我试图从数据库中选择以下值:

据报道,其“许多问题”之一是最近“女性服装销售持续下滑”,这家七家商店的零售商表示,它将在其所有门店开始为期三个月的清算销售。~(A)它的许多问题是最近的~(B)它的许多问题是最近的~(C)它的许多问题是最近~(D)他们的许多问题是最近~(E)他们的许多问题是最近~~(E)他们的许多问题是最近~~(E)他们的许多问题是最近的~(B)它的许多问题是最近的~(C)它的许多问题是最近的~(E)他们的许多问题是最近的~~(E)他们的许多问题是最近的~~(B)最近~(C)它的许多问题是最近的~(D)他们的许多问题是最近的~(E)他们的许多问题是最近

我在变量$ques中选择这个值,然后选择文本如下:

代码语言:javascript
复制
$ques=~s/^(.*?)\@(.*?)\@(.*?)$/$2/;

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

代码语言:javascript
复制
$3=~s/~/\n/g;    ---->line 171

在运行脚本时,我得到一个错误:

代码语言:javascript
复制
Modification of a read-only value attempted at main.pl line 171

我想用'\n‘替换所有的~字符,然后打印最后的值。请建议怎么做。

*我在网上研究过这个问题,但对如何处理这些只读变量感到困惑。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-04 15:36:39

在本例中,您真正想要的是拆分而不是正则表达式捕获组:

代码语言:javascript
复制
my @parts = split(/@/, $ques);
$parts[2] =~ s/~/\n/g;

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

票数 2
EN

Stack Overflow用户

发布于 2016-03-04 12:41:48

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

这样你就可以写:

代码语言:javascript
复制
my $new_value = $3 =~ s/~/\n/rg;
票数 3
EN

Stack Overflow用户

发布于 2016-03-04 12:10:14

正如您所说,特殊变量$1$2等都是只读的,这意味着您不能对它们执行替换。

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

代码语言:javascript
复制
$ques =~ s/~/\n/g;
print $ques;

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35795407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档