看着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