我无法理解这样一个简单的陈述我做错了什么。问题出现在该行:
$this->_validate_hash($hashref->{$key}, $schemaref->{$key}, $path . (ref($hashref->{$key}) ? $key . "/" : "\\\@$key"), $errors);
所以我希望以/path/to/some/\@attribute
结束。但是,我现在得到的是path/to/some/\\@attribute
。我在最后一部分尝试了各种组合,包括'\\' . '@' . $key
或'\@' . $key
或'\\@' . $key
,但我仍然无法摆脱反斜杠。这是perl字符串中的一些怪癖,我不知道吗?谢谢。
答案 0 :(得分:1)
那是不是一个简单的陈述;它分为两行,包含各种东西。这实现了相同的结果,尽可能接近(并假设$xpath
未在脚本的其他地方使用):
my $xpath = $path . (ref($hashref->{$key}) ? $key . "/" : "\\\@$key");
$this->_validate_hash($hashref->{$key}, $schemaref->{$key}, $xpath, $errors);
然而,它更具可读性 - 仍然不是特别容易,但比原版更具可读性。
你的问题孩子似乎可以减少:
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),或者你的设置有不同的东西。鉴于我们没有所有哈希等,很难得到它 - 但你应该以类似的方式分解你的问题。