Perl - Mojolicious - 在模板中打印 undef 键

Perl - Mojolicious - Print undef key in template

为了提供一些上下文,我的控制器从查询中选择一个数组引用。然后结果像这样打印在模板中。

home.html.ep

 <td> <%= @$query_result[0]->{data} %> </td>    
 <td> <%= @$query_result[1]->{data} %> </td>  
 ....  
 <td> <%= @$query_result[27]->{data} %> </td>    

由于某些结果不存在,Mojolicious 抛出错误(不能使用 undef 哈希值...)
我想做什么:
当 Mojolicious 到达 undef 散列 key/value 以打印 'No Data'.
我试过这样:

  <td> <%= @$query_result[27]->{data} || 'no data' %> </td>   
  or    
  <td> % (exists(@$query_result[27]->{data})) ? <%= @$query_result[27]->{data} %> : 'no data' </td>   
  or 
  <td>
  % if (exists($query_result[27]->{data})) {
  <%= $query_result[27]->{data} %>
  % } else { 
  'No data'
  % }

我不能只删除 <%= $query_result[27]->{data} %> 因为它 return 来自运行在不同参数上且只有一些参数的查询不要 return 第 27 个数组。

有什么方法可以实现我的目标吗?谢谢!

您似乎正在尝试显示从 027 或更少的所有索引。您可能想为此使用一个循环。

% foreach my $i ( 0 .. scalar @$query_result ) {
<td> <%= @$query_result[$i]->{data} %> </td>    
% }

现在您不必再关心列数了。对标题做同样的事情,你就成功了。


或者,您需要先检查 $query_result->[27] 中是否有内容,然后才能进行 exists 检查,因为 undef(即 无值) 不能像散列引用一样使用。

<td><%= $query_result->[27] ? @$query_result[27]->{data} : 'no data' </td>