Perl:字符串不转义反斜杠

Perl:字符串不转义反斜杠,perl,string,escaping,Perl,String,Escaping,我无法理解我这么简单的陈述到底做错了什么。问题发生在线路上: $this->\u validate\u hash($hashref->{$key},$schemaref->{$key},$path.(ref($hashref->{$key})?$key./“:“\\\\@$key”),$errors) 所以我希望事情以/path/to/some/\@属性结束。然而,我现在得到的是path/to/some/\\@属性。在最后一部分中,我尝试了各种组合,包括'\\'.@'$键或“\@”$键或“\\@

我无法理解我这么简单的陈述到底做错了什么。问题发生在线路上:

$this->\u validate\u hash($hashref->{$key},$schemaref->{$key},$path.(ref($hashref->{$key})?$key./“:“\\\\@$key”),$errors)

所以我希望事情以
/path/to/some/\@属性
结束。然而,我现在得到的是
path/to/some/\\@属性
。在最后一部分中,我尝试了各种组合,包括
'\\'.@'$键
“\@”$键
“\\@”$键
但我仍然无法摆脱反斜杠。这是perl字符串中我不知道的一些怪癖吗?谢谢

这不是一个简单的说法;它被分成两行,包含各种各样的东西。正如我所看到的,这实现了相同的结果(假设脚本中的其他地方没有使用
$xpath
):

然而,它更接近可读性-仍然不是特别容易,但比原来的可读性要高得多

你的问题孩子似乎可以减少到:

use strict;
use warnings;

my $key  = "attribute";
my $path = "/path/to/some/";
my $localpath = $path . "\\\@$key";

print "Key:   $key\n";
print "Path:  $path\n";
print "Local: $localpath\n";
该代码工作得很干净:

Key:   attribute
Path:  /path/to/some/
Local: /path/to/some/\@attribute

所以,要么我使用了不同的Perl(在Linux x86/64上是5.12.1),要么您的设置有所不同。考虑到我们没有所有的哈希值等,这将是很难做到的-但你应该用类似的方式分解你的问题。

对我有用。你能用尽可能少的代码复制吗?好吧,现在我觉得有点愚蠢。它确实可以工作,但似乎不行,因为当我打印散列时,值是用单引号打印的。因此,
“/path/to/some/\@attribute”
被呈现为
“key”=>“path/to/some/\@attribute”
。谢谢你的帮助:)
Key:   attribute
Path:  /path/to/some/
Local: /path/to/some/\@attribute