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