看着the source for 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]
不过,看着the source for JE::Object::Proxy,JE::Object::Proxy
有一个方法class
可能也许返回的对象是一个代理类的名称。因此,您可以使用$x->{$y}->class
获得课程名称,然后可以直接在$x->{$y}->class eq 'HTMLImageElement'
中进行测试。
测试代码是否按字面打印'[object HTMLImageElement]'?如果是这样,那么它看起来像对象有一个字符串化方法。如果是这种情况,你可以使用'“$ x - > {$ y}”eq'[object HTMLImageElement]'来测试字符串化的结果。同样,你可以通过强制字符串化来获得类名,例如'我的$ class_name =“$ x - > {$ y}”;' – zgpmax 2012-03-14 15:40:09