+6  A: 

skip() is exported from Test::More, which you might have loaded since your executable is named t/tester.pl.

What does ref($cursor) yield you? It should be a blessed MyModule::Cursor object, but the "invalid object" error might be suggesting the object was not constructed properly.

EDIT: perldiag gives another clue: "in cleanup" signifies that a problem was encountered by the object's destructor. Assuming you don't already have a destructor in the object, create a MyModule::Cursor::DESTROY method that Data::Dumps the object to see what it looks like at this time.

A concise snippet of example code that exhibits this behaviour would be very helpful.

Ether
The error message says it's looking for *skip* on *MyModule::Cursor*, so I don't think this is the problem.
Andrew Barnett
`MyModule::Cursor::skip` may be `Test::More`'s skip though.. although I do find it odd that it can't find *anything*. It would seem that at worst it is finding the wrong version of `skip()`, rather than nothing at all.
Ether
+2  A: 

Without actual code, it's difficult to debug this.

Do you use MyModule::Cursor in your test code? When you replaced skip with skipper, were you calling it in exactly the same way from your test module? Are you able to use skip from a throw-away (one-liner or very short script)?

Where I'm going with this is looking for an error in your test code, rather than the module.

UPDATE: You're not doing something like declaring methods on MyModule::Cursor in two different files, are you? The error message you're getting tells me it has a blessed reference to an object of type MyModule::Cursor, so it knows about the class; but then it can't find the definition of skip. Do you happen to declare part of MyModule::Cursor in one file, and skip in another, and your test module isn't including the second file? Or do you have a syntax error somewhere around your definition of skip -- a missing semi-colon or unpaired curly brace? (But then again, why would MyModule::Cursor::skip work where $cursor->skip does not?)

Andrew Barnett