Ωme*_*ega 0 methods perl reference
我有一个使用模式的Perl应用程序WWW::Scripter
.它解析了非常庞大的代码,并且所有工作都很棒,只有一个问题发生,我无法理解.
我收到了错误
无法在/usr/lib/perl5/site_perl/5.8.8/JE.pm行的未填充引用上调用方法"addEventListener"...
它看起来像JE.pm
(JavaScript引擎)中的错误,似乎是稳定的.这个JE被称为WWW::Scripter
,这似乎也是稳定的模块.
跟踪JavaScript源我意识到,有时(并不总是)这样的错误发生在JavaScript的以下部分:
var addEvent=(function(){if(document.addEventListener){...
Run Code Online (Sandbox Code Playgroud)
这似乎也是正确的.
让我们来看看JE.pm
发生错误的部分>>
my ($method, $type) = _split_meth $m;
$proto->new_method(
$name => defined $type
? $unwrap
? sub {
$self->_cast(
scalar shift->value->$method(
$self->_unwrap(@_)),
$type
);
}
: sub {
$self->_cast(
scalar shift->value->$method(@_),
$type
);
}
: $unwrap
? sub { shift->value->$m(
$self->_unwrap(@_)) }
: sub { shift->value->$m(@_) },
);
Run Code Online (Sandbox Code Playgroud)
和"线",这种错误发生在它的底部,所以>>
: $unwrap
? sub { shift->value->$m(
$self->_unwrap(@_)) }
: sub { shift->value->$m(@_) },
Run Code Online (Sandbox Code Playgroud)
那有什么不对?在这种情况下,什么错误未完成引用意味着什么?
Wes*_*ker 11
一个未经证实的引用是一个变量不是对象的合法引用,但是你试图在它上面调用一个函数就好像它是一个合法的对象.
# perl -e '$x = {}; $x->blue();'
Can't call method "blue" on unblessed reference at -e line 1.
Run Code Online (Sandbox Code Playgroud)
$m
在您的上述文本中,可能是函数名称,addEventListener
但未shift->value
返回已被"祝福"的正确对象.这是一种说明package
应该在其中调用哪些函数的方法.这是一些示例代码:
package Foo;
sub afunction {
print "hello world\n";
}
package main;
my $obj = {};
bless $obj, "Foo"; # $obj is now a "Foo"
my $m = "afunction";
$obj->$m();
my $obj = {};
my $m = "afunction";
# this will crash, because we didn't bless it this time
print "about to crash\n";
$obj->$m();
print "we won't get here\n";
Run Code Online (Sandbox Code Playgroud)
运行以上将产生:
hello world
about to crash
Can't call method "afunction" on unblessed reference at test.pl line 21.
Run Code Online (Sandbox Code Playgroud)
现在,为什么上面的代码导致了一个无法解决的对象,你必须做更多的调试才能发现.
归档时间: |
|
查看次数: |
10525 次 |
最近记录: |