[Linux-aus] Moose, JSON Question
David Lloyd
lloy0076 at adam.com.au
Sun Jan 4 20:18:00 EST 2009
>
Daniel,
(Daniel said the things that have a 0 or 1 level of quotation depeding
on what index you start arrays):
>>>> 1. But the caveat is that they don't do what you expect them to
>>>> do...
>>>
>>> They don't do what *you* expect them to do — your examples did
>>> exactly what I expected. ;) More seriously, this is the standard
>>> Perl
>>> behaviour, not anything to do with Moose or otherwise.
>>
>> Sometimes Perl gives me the willies, to use the vernacular.
>
> Heh. Fair enough. I confess I never really understood that, myself,
> since the behaviour is almost always pretty consistent, but the DWIM
> features can sometimes be very confusing, even to experts. :)
>
Indeed.
>> I must have missed that when I did:
>>
>> perl -Ilib -MTestJSOn -e -d 0
>> ...
>> DB<?> S
>> [lots of methods]
>
> Odd. I don't know if there is anything special that might hide them
> from the debugger 'S' output—I have never actually used the Perl
> debugger, to be honest, so don't know what quirks it might hide.
>
I still don't recall seeing it. Then again I am special. Not
necessarily in the right ways.
>
> Well, you should probably think of a Moose "role" as a Java
> "interface",
> kind of, except that it comes with implementation as well.
Yeah, a mixin type thing. An interface with some implementation that
could be overridden.
>>>> 1. That is, in this case I did "use JSON;" and caused
>>>> "from_json"
>>>> and "to_json" to materialise - if I have an actual object
>>>> (TestJSON->new()) I can call them but as shown the behaviour
>>>> is suboptimal
>>>
>>> Your calling convention is wrong: the JSON methods need to have
>>> their
>>> data as the first argument, and calling them as methods means that
>>> they
>>> don't.
>>
>> I understood that much - hopefully my commentary indicated that I'd
>> detected that they were being called as class methods rather than
>> POPMs (Plain Old Perl Methods).
>>
>>> The summary is, don't do that. Use your wrapper methods. ;)
>>
>> I was kind of hoping that Moose or the Perl Object system would
>> insulate me from this type of shenanigans.
>
> Those "shenanigans" are the basic ingredients of method calling in
> Perl;
> would you really want an OO system that completely and utterly changed
> the calling convention of the language?
YES.
I wanted a Java like object system where imported "things" couldn't be
seen from the outside. And it's worse - it's class specific random
things (if you don't use a method, it seems whatever whacko export
method JSON uses doesn't expose it) - so the behaviour changes
depending on what you've written EVEN IF it's not called.
That said, do you think it's possible to write a "Moose::Strict"
module that:
* Only exposed methods explicitly defined as "subs" on that class, its
children or mixins/roles
I suspect it's possible.
DSL
More information about the linux-aus
mailing list