我试图从数据库中选择以下值:
据报道,其“许多问题”之一是最近“女性服装销售持续下滑”,这家七家商店的零售商表示,它将在其所有门店开始为期三个月的清算销售。~(A)它的许多问题是最近的~(B)它的许多问题是最近的~(C)它的许多问题是最近~(D)他们的许多问题是最近~(E)他们的许多问题是最近~~(E)他们的许多问题是最近~~(E)他们的许多问题是最近的~(B)它的许多问题是最近的~(C)它的许多问题是最近的~(E)他们的许多问题是最近的~~(E)他们的许多问题是最近的~~(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我想用'\n‘替换所有的~字符,然后打印最后的值。请建议怎么做。
*我在网上研究过这个问题,但对如何处理这些只读变量感到困惑。
发布于 2016-03-04 15:36:39
在本例中,您真正想要的是拆分而不是正则表达式捕获组:
my @parts = split(/@/, $ques);
$parts[2] =~ s/~/\n/g;它使代码的意图更加清晰,因为实际上,您正在@符号上拆分。
发布于 2016-03-04 12:41:48
你已经从何塞·卡斯特罗那里得到了一个很好的解释。但是,如果您使用的是最新版本的Perl (更新:检查得更仔细,我发现这意味着5.14+),还有另一种解决方案。替换操作符的/r参数将复制字符串,在副本上进行替换,然后返回修改后的值。
这样你就可以写:
my $new_value = $3 =~ s/~/\n/rg;发布于 2016-03-04 12:10:14
正如您所说,特殊变量$1、$2等都是只读的,这意味着您不能对它们执行替换。
在$ques上执行替换将满足您的需要:
$ques =~ s/~/\n/g;
print $ques;请注意,在您在$ques上执行的早期替换中,您正在删除所有的~字符。
https://stackoverflow.com/questions/35795407
复制相似问题