[Catalyst] Perplexed Catalyst newbie

Matt S Trout dbix-class at trout.me.uk
Tue Apr 21 11:51:36 GMT 2009


On Mon, Apr 20, 2009 at 09:49:51AM -0700, Sean McAfee wrote:
> On Mon, Apr 20, 2009 at 6:29 AM, Matt S Trout <dbix-class at trout.me.uk>wrote:
> 
> > On Sun, Apr 19, 2009 at 09:51:42PM -0700, Sean McAfee wrote:
> > > [% FOR a IN as; FOR b IN a.bs; b.cs; "<br>"; END; END %]
> >
> > b.cs here is equivalent to:
> >
> > my $val = [ $b->cs ];
> >
> > not
> >
> > my $val = $b->cs;
> >
> 
> Where does that happen?  I'm pretty intimately familiar with the Template
> Toolkit, having written the Python port, so I know that all method calls in
> a template occur in scalar context, and so "b.cs" in a template should
> indeed translate to "my $val = $b->cs;" on the Perl side.

No, all method calls occur in *list* context. This has been true for as long
as I've been using TT. It was the reason the _rs methods were introduced to
DBIC. You're welcome to write your own code that tests wantarray to verify
this - and unless you do so, I'm not going to believe you that your copy
does the opposite of what everybody else's has for the past several years :P

> So after some finagling, my template now reads:
> 
> [% FOR a IN as; FOR b IN a.bs_rs; !b.cs_rs.defined; "<br>"; END; END %]

a.bs_rs returns a RESULTSET.

FOR b IN a.bs_rs.all will work. You wanted to be able to do .next so I
gave you a resultset. That's not an array.

-- 
      Matt S Trout       Need help with your Catalyst or DBIx::Class project?
   Technical Director                    http://www.shadowcat.co.uk/catalyst/
 Shadowcat Systems Ltd.  Want a managed development or deployment platform?
http://chainsawblues.vox.com/            http://www.shadowcat.co.uk/servers/



More information about the Catalyst mailing list