Глядя на источник для JE , выглядит, что JE::Object::Proxy
является подклассом JE::Object
, а JE::Object
имеет метод строкового преобразования (use overload fallback => 1, ... '""' => 'to_string' ...
).
Поэтому, когда вы делаете print "$y\t$x->{$y}\n";
, это печатает результат строкового преобразования $x->{$y}
.
. Вы можете преобразовать объект в строку, заключив его в двойные кавычки, поэтому "$x->{$y}"
.Тогда это выражение будет иметь такие значения, как вы видели при печати, например, '[object HTMLImageElement]'
.
Если вы хотите выбрать только HTMLImageElement объекты, то вы можете проверить их, используя выражение типа
"$x->{$y}" eq '[object HTMLImageElement]'
Если вы особенно хотите извлечь строку 'HTMLImageElement'
из строкового значения, вы можете сделать это с помощью регулярного выражения, например,
("$x->{$y}" =~ m{^\[object (.*)\]$}so)[0]
THOUGH, глядя на источник для JE :: Object :: Proxy , JE::Object::Proxy
имеет метод class
, который может, возможно, вернуть имя класса, для которого объект является прокси.Таким образом, вы можете получить имя класса с помощью $x->{$y}->class
, а затем проверить его напрямую, как в $x->{$y}->class eq 'HTMLImageElement'
.