chromatic skribis 2005-06-20 15:58 (-0700): > I think: > sub AUTOLOAD {} > is better than: > sub AUTOLOAD { return sub {} }
It's nicer to type, but I think that your preferred syntax means that the AUTOLOAD sub itself has to call any loaded code, which can mean that it has to fit arbitrary given arguments to an arbitrary signature, which I think is way too hard. One alternative, that I don't like, is to ignore non-subref returns, but call a returned subref. Then something else has to indicate failure, and that thing is probably fail. The problem that I have with that is that you lose the free verbose, clear and standard error message you could otherwise have. Unless fail here uses a default that isn't $_ or $!, and I do not like special cases like that. Note that as long as empty closures can be typed without the sub keyword, and the return keyword is optional for the last statement, the following is perhaps a syntactically more satisfying solution for you: sub AUTOLOAD {{}} If I understand things correctly, a null closure will have such small overhead that you can pass it around just as freely as integers. Of course, calling the empty closure can be optimized away, although I hope I also understand correctly that the overhead of calling something is also so drastically reduced since Perl 5, that {}() is not much heavier than do {} or the null statement between two semicolons: ;;. > Or have I misunderstood the proposal and the purpose of AUTOLOAD? Well, the purpose I think you have misunderstood, as your example doesn't LOAD anything. But then, I have always thought AUTOLOAD was a bad name, because it is so much more powerful than that. Perhaps DEFAULT, FALLBACK or MISSINGSUB would be more appropriate. I also don't see the symmetry between AUTOLOAD and AUTOMETH. Two things bother be about that: LOAD versus METH, while it should be SUB versus METH, and that METHOD is abbreviated while in the method keyword it is not. Either it should be abbreviated everywhere: meth foo { ... }, or nowhere: AUTOMETHOD. I personally like the "meth foo { ... }". Juerd -- http://convolution.nl/maak_juerd_blij.html http://convolution.nl/make_juerd_happy.html http://convolution.nl/gajigu_juerd_n.html