繁体   English   中英

Perl:字符串不转义反斜杠

[英]Perl: Strings not escaping backslashes

如此简单的陈述我无法理解我在做错什么。 问题发生在网上:

$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'\\@' . $key '\\@' . $key'\\\\@' . $key '\\\\@' . $key但是我仍然无法逃脱反斜杠。 这是我不知道的perl字符串中的一些古怪吗? 谢谢。

不是一个简单的声明; 它分为两行,包含各种内容。 可以达到相同的结果,正如我所看到的(并假设$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),要么您的设置有所不同。 鉴于我们没有所有的哈希等,因此很难理解-但是您应该以类似的方式解决问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM