Perl: строки, не выходящие из обратной косой черты - PullRequest
0 голосов
/ 13 января 2011

Я не могу понять, что я делаю неправильно с таким простым утверждением. Проблема возникает на линии:

$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 Ответ

1 голос
/ 13 января 2011

То есть не простое утверждение; он разбит на две строки и содержит всевозможные вещи. Это дает тот же результат, насколько я могу видеть (и при условии, что $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 (это был 5.12.1 в Linux x86 / 64), либо в вашей настройке что-то другое. Учитывая, что у нас нет всех хэшей и т. Д., Будет трудно получить к ним доступ, но вы должны разбить свою проблему аналогичным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...