2014-02-09 142 views
0

为什么在下面的代码片断:为什么打印反向引用时不打印反斜杠?

~$ perl -e ' 
my $var = "SRC=array.c builtin.c eval.c field.c gawkmisc.c io.c \ main.c "; 
$var =~ /^\w+=(.*)/; 
print "$1\n"; 
' 
array.c builtin.c eval.c field.c gawkmisc.c io.c main.c 

\未在反向引用打印。 .显然与字符串文本中的\匹配,因为捕获直到行尾,所以为什么不打印?
为什么我需要在这种情况下逃避它?

+0

的一种方式打印目标变量以查看实际内容。 :) –

+0

@briandfoy:我不知道该怎么做。我只是打印反向引用 – Jim

+0

当然你知道该怎么做。刚刚初始化变量后,'print $ var'。然后你可以看到你认为的变量是否在你认为是问题的操作之前。 –

回答

3

反斜杠字符的特殊之处在于它表明以下内容不是字面的。例如,使用"line 1\nline 2\n"这样的文本,您会看到"\n"的两个实例...反斜线表示以下是特殊含义,而n表示回车。在你的情况下,"\ "没有特别的意义,所以只打印空间。

如果你真的想看到反斜杠,"\\"将做到这一点。

2

"\ "被认为是“逃脱的空间”。如果你真的想看到\,你需要在你的字符串中使用\\

如果您在您的输出仔细观察,你会看到

io.c main.c 
    ^^ 

有空间...

如此微小的变化需要:调试这

perl -e ' 
my $var = "SRC=array.c builtin.c eval.c field.c gawkmisc.c io.c \\ main.c "; 
$var =~ /^\w+=(.*)/; 
print "$1\n"; 
' 
array.c builtin.c eval.c field.c gawkmisc.c io.c \ main.c