On 6/5/07, Gavin Spomer <[EMAIL PROTECTED]> wrote:

Hi Folks,

I have an array of "facet" objects called @facets. A "facet" object has a
method called facet_name. I would like to output this using dynamic tables,
instead of having to do an Embperl foreach loop. The following Embperl
foreach loop works:

   <table>
   [$ foreach $facet (@facets) $]
      <tr>
         <td>[+ $facet->facet_name +]</td>
      </tr>
   [$ endforeach $]
   </table>

However when I try using an Embperl dynamic table (as desired) like the
following:

   <table>
      <tr>
         <td>[+ $facets[$row]->facet_name +]</td>
      </tr>
   </table>

I get an error:

   [1381]ERR: 24: Error in Perl code: Can't call method "facet_name" on an
undefined value at /usr/local/mylibrary/index.epl line 17.

Oddly enough, the following works (using a literal value of zero instead
of $row):

   <table>
      <tr>
         <td>[+ $facets[0]->facet_name +]</td>
      </tr>
   </table>

And also this works too, even though it isn't the output I'm looking for:
(It's not calling facet_name)

   <table>
      <tr>
         <td>[+ $facets[$row] +]</td>
      </tr>
   </table>

What am I doing wrong? It seems to me like something funky is going on
with $row.


Thats how $row works.  It keeps repeating the expression until it evaluates
to undef.  This works great for $array[$row], but in your case the last row
is undef->facet_name which gives that error.

Try [+ $facets[$row] and $facets[$row]->facet_name +]  or else switch to
(possibly nested) array/hash structures rather than method calls.

--
- Gus

Reply via email to