我有一个字符串,
my $element="abc#$def"
我使用
逃脱# $element=~s/#/\\#/g;
打印为:abc\#$def
,这是完美的。
代码的下一部分是:
push(@arr,$element);
foreach $val (@arr)
{
print $val;
}
foreach循环中打印的值为:abc#$def
。
为什么#
没有在此处转义?我怎样才能保留逃逸?
答案 0 :(得分:2)
你并没有向我们展示一切。要获得声明的结果,我必须创建初始化的变量$def
,如下所示。但是,当我这样做时,我会得到您期望的结果,而不是您显示的结果。
$ cat xx.pl
use strict;
use warnings;
my $def = '$def';
my $element = "abc#$def";
$element =~ s/#/\\#/g;
print "$element\n";
my @arr;
push(@arr, $element);
foreach my $val (@arr)
{
print $val;
print "\n";
}
$ perl xx.pl
abc\#$def
abc\#$def
$
在MacOS X 10.6.8上使用Perl 5.14.1进行了测试,但我不认为其行为会因任何其他版本的Perl 5而异。
鉴于此,您是否可以更新您的问题以显示与我类似的脚本(特别是同时使用use strict;
和use warnings;
)但会生成您显示的结果?
答案 1 :(得分:0)
有这样的事情:
$element=~s/#/\\#/g;
你必须逃避\
修改强>
此代码可以按照您的预期在我的计算机上运行:
use strict;
use warnings;
use Data::Dumper;
my $element='abc#$def';
my @arr;
$element=~s/#/\\#/g;
print $element."\n";
push(@arr,$element);
foreach my $val (@arr)
{
print $val;
}