kri*_*ina 1 perl perl-module xs
我正在研究一个Perl模块,每当我调用skip()我用以下方式编写的方法时:
$cursor->skip(4);
Run Code Online (Sandbox Code Playgroud)
我明白了:
Undefined subroutine &MyModule::Cursor::skip called at t/tester.pl line 24.
(in cleanup) invalid object at t/tester.pl line 24.
当我称之为:
MyModule::Cursor::skip($cursor, 4);
Run Code Online (Sandbox Code Playgroud)
Perl发现了!
奇怪的是,如果我将" skip" 命名为" "(" skipper"," hello"),则此语法有效:
$cursor->skipper(4);
Run Code Online (Sandbox Code Playgroud)
我想也许skip()是一个"秘密"保留的关键词或者其他东西,但我也有方法命名sort()和next()(我知道是保留的),这些工作正常.
我真的很想把这个方法命名为" skip." 有谁知道为什么Perl找不到它?
skip()是从Test::More您的可执行文件命名后可能已加载的t/tester.pl.
什么ref($cursor)让你感兴趣?它应该是一个受祝福的MyModule::Cursor对象,但" invalid object"错误可能表明该对象未正确构造.
编辑:perldiag给出了另一条线索:" in cleanup"表示对象的析构函数遇到了问题.假设您在对象中还没有析构函数,请创建一个MyModule::Cursor::DESTROY方法,Data::Dump该对象可以在此时查看它的外观.
展示此行为的简洁示例代码片段将非常有用.