Perl:字符串不会逃避反斜杠

时间:2011-01-13 00:43:40

标签: perl string escaping

我无法理解这样一个简单的陈述我做错了什么。问题出现在该行:

$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字符串中的一些怪癖,我不知道吗?谢谢。

1 个答案:

答案 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),或者你的设置有不同的东西。鉴于我们没有所有哈希等,很难得到它 - 但你应该以类似的方式分解你的问题。