为什么从数组中读取时#的转义会消失?

时间:2011-07-20 05:16:27

标签: perl

我有一个字符串,

my $element="abc#$def"

我使用

逃脱#
 $element=~s/#/\\#/g;

打印为:abc\#$def,这是完美的。

代码的下一部分是:

push(@arr,$element);
foreach $val (@arr)
{
 print $val;
}

foreach循环中打印的值为:abc#$def

为什么#没有在此处转义?我怎样才能保留逃逸?

2 个答案:

答案 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;
}