Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re: Re: Forcing Compile Time Checking That Subs Exist

by sierrathedog04 (Hermit)
on Jun 05, 2001 at 00:11 UTC ( #85593=note: print w/ replies, xml ) Need Help??


in reply to Re: Forcing Compile Time Checking That Subs Exist
in thread Forcing Compile Time Checking That Subs Exist

Much as I love Perl and hate to admit it, it strikes me as a serious deficiency that Perl will not warn me at compile-time if, using an OO interface to a module such as CGI.pm, I accidentally mistype a function name.

Larry's slogan is "There's More Than One Way To Do It" but when it comes to compile-time checking of an OO module's function calls it would be more accurate to say "There's No Way To Do It."

A hairline crack is developing in my solid wall of faith in Perl. I keep thinking that there must be a way to do compile-time checking of an OO module's function calls. Otherwise people will spend hours as I did trying to find their own typing errors.


Comment on Re: Re: Forcing Compile Time Checking That Subs Exist
Re: Re: Re: Forcing Compile Time Checking That Subs Exist
by chromatic (Archbishop) on Jun 05, 2001 at 01:09 UTC
    Maybe the compiler's not the right tool to catch these errors.

    It's a hard nut to crack because of things like AUTOLOAD, Autosplit, and run-time access to class symbol tables. We won't even get into the abomination that is multiple dispatch, because I'm still wrapping it around my brain.

    I catch a lot more errors running unit tests on my code than I do running it through the compiler and looking for warnings. If you exercise your code paths sufficiently as bikeNomad suggests, you'd get closer to what you want than the compiler can provide.

    It's not exactly what you want, but it's working pretty well for me.

Re: Re: Re: Forcing Compile Time Checking That Subs Exist
by bikeNomad (Priest) on Jun 05, 2001 at 01:12 UTC
    Keep the faith, Brother!

    Having been a Smalltalk user for at least 5 years now, one thing that helps in typical Smalltalk environments is their checking of method names when you define new methods. Every time you edit a method, it's recompiled; the compiler does a simple check to see if any of the method names you're using haven't been defined yet. If so, you get a warning. This has helped me detect a lot of typos in my code.

    I'm thinking that a similar strategy could be used with Perl, by scanning programs like this:

    • For each 'use'd or 'require'd package, make a defined symbol list (easiest way to do this is probably just to use B::Xref).
    • Scan your program for method calls (or, more simply, for words, removing all the Perl pre-defined words).
    • Make a list of all the method calls (or words) in your program that don't match any of the subroutines defined in your included packages

    This is a simple strategy, and it should be easy to implement. Tell me if it works!

    I still prefer full testing, though. Have you read anything about Extreme Programming techniques? One of the XP tenets is to write tests FIRST.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://85593]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (5)
As of 2014-08-30 19:54 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (293 votes), past polls