[Petal] repeat through hash

Josh Narins josh at narins.net
Wed Jun 7 13:29:58 BST 2006


> On Thursday 20 April 2006 17:29, Jonathan Vanasco wrote:
> > On Apr 20, 2006, at 7:24 PM, Corey wrote:
> > > Anyone in favor? Any pitholes or details I'm missing?
> > 
> > Well there's this:
> > 	in Perl, Python and PHP (the TAL implementations I use ),  hashes  
> > ( perl hashes, python dicts , php named arrays ) are unordered.  
> > randomly showing items from a list, IMHO, is worthless and confusing.
> > 
> 
> True.  And I agree that, from a presentation standpoint, randomly displaying
> items from an unordered list is not always useful or sensical - however there
> are certainly plenty of instances/use-cases where an ordered presentation 
> is not in fact necessary, or where there truly is no criteria from which to sort 
> by anyways. ( I'm currently writing an app in which this is the case. )

1.a

I've always wanted petal to be perl'ier, and less TAL'ish.

<select name="perly">
 <option petal:repeat="a [sort [{BLOCK}] keys myHash]"
 petal:attributes="value="a" petal:content="myHash/a" />
</select>

1.b

Of course, to see just how far I'd like it to go, I'd like to see it
more like:

<table>
 <tr foreach="my $i (keys %myHash)">
 <td petal:content="$myHash{$i}->{abc}" />
 </tr>
</table>

2.

Someone mentioned _other_ implementation of TAL in perl? Hrm.

-Josh

--nothing below this point

> I have to point out though, that hashes/dicts/named-arrays are unordered
> _internaly_, while arrays are merely ordered internally by subscript ( i.e.,
> 0 - N ) -- point being, for all intents and purposes:
> 
> $people_array = [
>    {
>       'firstname' => 'Benjamin',
>       'lastname'  => 'Tucker'
>       'id_num'    => '456a7'
>    },
>    {
>       'firstname' => 'Pierre-Joseph',
>       'lastname'  => 'Proudhon'
>       'id_num'    => '765z4'
>    }
> ];
> 
> ... and
> 
> $people_hash = {
>    '456a7' =>
>       {
>          'firstname' => 'Benjamin',
>          'lastname'  => 'Tucker'
>       },
>    '765z4' =>
>       {
>          'firstname' => 'Pierre-Joseph',
>          'lastname'  => 'Proudhon'
>       }
> };
> 
> ... can both be said to be "unsorted", from a template user perspective. 
> ( assuming that $people_array wasn't _manually_ sorted by the programmer
> in the order specified (i.e, first comes Tucker, then comes Proudhon) ).
> 
> So, while looping through $people_array, the template user would always 
> get Tucker first, then Proudhon; and while looping through $people_hash, 
> the user would not know for sure which order the results would be iterated - 
> the difference is more or less the same: both "lists" were not filtered through
> a purposed sort/order function.
> 
> So, appologies for the digression - but I'm attempting to illustrate that the issue
> of sorting is quite separate from the issue of allowing Petal's 'repeat' statement 
> to be implemented in a manner which allows transparent looping over hashes.
> 
> If the feature in question is:  
> 
> #1 - conformant to TAL spec
> and
> #2 - implementable in Petal
> but
> #3 - deemed usefull
> 
> ... then I think it may be worth considering.
> 
> If either #1 _or_ #2 are definitely false, then there is no reason to continue.
> 
> If #1 and #2 are true, but #3 is debatable, then I think it would come down
> simply to whoever got around to actually implementing it - and people could 
> use it or not; but it would at least be available.
> 
> 
> > to do what you want, it would just be going randomly through the hash
> > 
> 
> That's ok, as it is not always necessary to loop over sorted lists -- in those 
> cases, I feel that being able to loop/repeat over hashes would be quite helpfull 
> and convienient - and could be implemented without parting from the TAL spec.
> 
> 
> > i believe that in python you can map the repeat onto a generator or  
> > iterator - i *think* you can figure out a way mimic that it in perl  
> > using petal's method support
> > 
> > ie, your repeat loop calls a function that returns the next item in  
> > whatever sequence, and petal stops doing that at the end
> > 
> 
> This is definitely good food for thought - as I start using TAL/Petal more
> and more.
> 
> 
> > i tried to stab away at the petal source and try to get nested  
> > variable to work.  i don't think its quite possible.
> >
> 
> Bummer!
> 
> ( Cool that you tried though. I was actually going to bring that up in another
> post - hoping we/someone could fix that. )
> 
> 
> > maybe some college student out there would want to do it through  
> > google summer of code?  that would be awesome.
> > 
> 
> Definitely.
> 
> Could you summarize what makes that feature so difficult?
> 
> 
> CHeers,
> 
> Corey
> 
> 


More information about the Petal mailing list