Regex 在Perl中用_plus替换+的正则表达式

Regex 在Perl中用_plus替换+的正则表达式,regex,perl,Regex,Perl,我需要将服务响应中的+字符替换为_plus。到目前为止,我已经得到了以下结果,当响应包含“+”时,它可以工作,但当响应包含其他任何内容时,例如“hello”,它不会返回任何内容: my $response = 'hello'; my $find = '+'; my $replace = '_plus'; $response =~ s/\Q$find\E/$replace/g; print Data::Dumper::Dumper($response); 当响应是其他内容时,我得到错

我需要将服务响应中的+字符替换为_plus。到目前为止,我已经得到了以下结果,当响应包含“+”时,它可以工作,但当响应包含其他任何内容时,例如“hello”,它不会返回任何内容:

my $response = 'hello';   

my $find = '+';
my $replace = '_plus';

$response =~ s/\Q$find\E/$replace/g;

print Data::Dumper::Dumper($response);
当响应是其他内容时,我得到错误“在void上下文中无用地使用私有变量”

我只想正常返回它,如果它不包含任何+字符


感谢您的帮助。

您发布的代码不包含导致该警告的错误

当在void上下文中使用由词法变量组成的表达式时,会发出警告

$ perl -we'my $x; $x;'
Useless use of private variable in void context at -e line 1.
以下是有关此警告的说明:

在无效上下文中无用地使用%s

W void在对返回值不做任何处理的上下文中执行了一些没有副作用的操作,例如不从块返回值的语句,或标量逗号运算符的左侧。这通常不是指您的愚蠢,而是指Perl未能以您认为的方式解析您的程序。例如,如果您将C优先级与Python优先级混为一谈,并说

$one, $two = 1, 2;
当你想说

($one, $two) = (1, 2);
另一个常见错误是,当您应该使用方括号或花括号时,使用普通括号来构造列表引用,例如,如果您说

$array = (1,2);
当你应该说

$array = [1,2];
方括号显式地将列表值转换为标量值,而括号则不会。因此,当在标量上下文中对带括号的列表求值时,逗号被视为C的逗号运算符,它丢弃了左参数,这不是您想要的。请参阅perlref了解更多有关此的信息。 对于等于0或1的数值常量,不会发出此警告,因为它们通常用于以下语句中

1 while sub_with_side_effects();
通常计算为0或1的字符串常量将被警告


perl-e'my$response=hello;我的$find=q+;我的$replace=\u plus$响应=~s/\Q$find\E/$replace/g;print$response'打印hello时,即使启用了strict和warnings,也不会出现错误或警告。我想你可能没有提到更广泛的背景。例如,$stripChars与任何东西有什么关系?在哪里定义了$stripChars?$stripChars行的意思是:打印数据::转储程序::转储程序$response;没有更广泛的背景,是的,有。1您发布的代码甚至没有启用警告,因此即使您犯了它提到的错误,您也不会收到该消息,2您发布的代码不包含导致该警告的错误。Re。我发布了回答问题所需的所有代码不,你没有。正如Sean和ikegami已经解释的那样,运行您发布的代码不会生成警告。请创建一个我们可以在自己的机器上运行的应用程序,以复制您的问题。