1

私はPerlモジュールに取り組んでおりskip()、次のように書いたメソッドを呼び出すときはいつでも:

$cursor->skip(4);

私は得る:

未定義のサブルーチン&MyModule :: Cursor::skipがt/tester.plの24行目で呼び出されました。
        (クリーンアップ中)t/tester.plの24行目で無効なオブジェクト。

私がそれを次のように呼ぶとき:

MyModule::Cursor::skip($cursor, 4);

Perlはそれを見つけます!

奇妙なことに、 " skip"その他( " skipper"、 " hello")という名前を付けると、この構文は機能します。

$cursor->skipper(4);

おそらくskip()「秘密の」予約済みキーワードか何かだと思いましたが、sort()andという名前のメソッドnext()(予約済みであることがわかっています)もあり、それらは正常に機能します。

skipこのメソッドに「 。」という名前を付けたいと思います。Perlがそれを見つけられない理由を誰かが知っていますか?

4

2 に答える 2

6

skip()からエクスポートされTest::Moreます。実行可能ファイルの名前が であるため、これをロードした可能性がありますt/tester.pl

何がref($cursor)あなたをもたらしますか?MyModule::Cursorそれは祝福されたオブジェクトであるはずですが、" invalid object" エラーは、オブジェクトが適切に構築されていないことを示唆している可能性があります。

編集: perldiagは別の手がかりを与えます: " in cleanup" は、オブジェクトのデストラクタで問題が発生したことを示します。オブジェクトにデストラクタがまだないと仮定して、オブジェクトのMyModule::Cursor::DESTROYメソッドを作成しData::Dump、この時点でどのように見えるかを確認します。

この動作を示すサンプル コードの簡潔なスニペットが非常に役立ちます。

于 2009-08-14T22:28:13.067 に答える
2

実際のコードがないと、これをデバッグするのは困難です。

テスト コードでMyModule::Cursor を使用していますか? skipskipperに置き換えたとき、テスト モジュールからまったく同じ方法で呼び出していましたか? 使い捨て(ワンライナーまたは非常に短いスクリプト) からスキップを使用できますか?

モジュールではなく、テスト コードのエラーを探します。

更新: 2 つの異なるファイルでMyModule::Cursorのメソッドを宣言するようなことをしていませんか? あなたが得ているエラーメッセージは、タイプMyModule::Cursorのオブジェクトへの祝福された参照があることを教えてくれるので、クラスについて知っています。しかし、 skipの定義が見つかりません。MyModule::Cursorの一部を1 つのファイルで宣言し、別のファイルでスキップして、テスト モジュールに 2 番目のファイルが含まれていませんか? または、 skipの定義のどこかに構文エラーがありますか? セミコロンまたは対になっていない中括弧がありませんか? (しかし、繰り返しになりますが、なぜMyModule::Cursor::skip$cursor->skipで動作するのでしょうか?ではない?)

于 2009-08-15T18:06:32.603 に答える