develooper Front page | perl.perl5.porters | Postings from September 2003

Re: [perl #24016] [RESOLVED] overload log() does not allow additional parameters

Thread Previous
Rafael Garcia-Suarez
September 30, 2003 13:43
Re: [perl #24016] [RESOLVED] overload log() does not allow additional parameters
Message ID:
Tels wrote:
> Did you patch it? Otherwise IMHO it is not "resolved", because the workaround 
> presented:
> * is just a workaround, no real solution (it would be neccessary to put the 
> workaround into _each_ class, instead of _once_ into overload)
> * doesn't even work properly (the presented workaround has small bugs)
> * re-inventes the wheel: by hunting down which class to call we do exactly 
> what solves: overloading a specific class method)
> * it poses problems (what if different classes try to workaround and all 
> globber CORE::GLOBAL::log together?)

Indeed ; and I believe better solutions can be found.

However, in a few words, here's why I closed this bug :
overloading an operator is intended to modify its behaviour while
retaining its syntax.

Currently you can write this and rely on it :
    $ perl -e 'print log 2.718, "\n"'
and you can do this also by replacing 2.718 by any $variable.
If you're using a modified log() that takes an optional 2nd argument, you're
forced to know at compile-time that the second item is going to be an argument
to log() and not to print().

I don't think it's possible to get this right in a satisfying way through
overloading. At some point you will need to teach the parser that you've
modified the log() function, or you'll end up with an unfinished solution.

> I am in the process of trying to understand - but this takes more 
> time. The best I can come up is some comment&doc patch for now. Hopefully 
> this will lead to enough documentation so that this can be either fixed or 
> documented as "unfixable".

Enhancements welcomed, as always.

Thread Previous Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About