Good morning,

On 27/04/10 at 1:22 PM +0100, Dermot <[email protected]> wrote:

That comment was obviously tongue in cheek but there was an
underlining point that access via sub-routine reference is slower than
access via a hash. Toby was quick to point out that as far as he knew
$req->param->{} was the referred method.  Now that doesn't break
encapsulation and I'm assuming that it will be faster access method
than $req->params(). I could be wrong. I haven't benchmarked. I am
simply following the logic that subroutine references are slower that
hash lookups. Is it really so wrong to want to use params->{} over
params()?  You may call it premature optimisation (as if is a dirty
word) but to me it's just a good habit that has the benefits of being
a bit faster.

So just in case you missed it, when I said:

...but if I'm breaking the encapsulation in some ways that's going to
bite me later, I'd steer
clear.

I meant, "I'd don't want break encapsulation".

I hope that clear things up and you can stop talking about me as if
I'm not here :)

That didn't clear things up for me, and I thought I had some clarity already. So I guess one of us is (still) confused.

I thought it was an issue of:

    $req->param(...)

vs:

    $req->params->{...}

Note, one is plural, the other is not. The param method is for legacy CGI.pm compatibility, and as such, is slower. The params method returns a hash, and of course one then does direct hash lookups.

The params method is an alias for parameters. And since it simply returns a hash it is relatively speedy and encapsulates the internal parameters access (hash or whatever) within C::Request.

And for those who like juggling with sharp knives with one hand, they could skip both param and params methods and use:

    $req->{parameters}->{...}


So as long as one doesn't need CGI.pm compat, use $req->params->{...} as the 'best practices' approach. It's not slower like $req->param(...) is, but still offers the desired encapsulation.

Have I got that right or am I still confused?

My mental clue sheet looks like this:

$req->param(...) will return one value (scalar or array), the way I'm used to with CGI.pm. $req->params->{...} returns multiple values in a hash, which I can then reference by key.

One thing this discussion did help me with was some confusion that HTML::FormFu threw in there for me. In my mind, I kept confusing its $form->param(...) (& related) methods with $req->params->{...}. This discussion has resulted in me reviewing my usage of all various param(s) methods and I've found a few things to fix (or improve).

I hope I've got it right now.  :-)


Charlie

--
   Ꮚ Charlie Garrison ♊ <[email protected]>

O< ascii ribbon campaign - stop html mail - www.asciiribbon.org
〠  http://www.ietf.org/rfc/rfc1855.txt

_______________________________________________
List: [email protected]
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/

Reply via email to