【问题标题】:Can't use string ("0") as an ARRAY ref while "strict refs" in use在使用“strict refs”时不能使用字符串(“0”)作为 ARRAY ref
【发布时间】:2014-08-06 14:53:15
【问题描述】:

我的代码是:

my $mortgageValue = $c->forward('/_asset/_real_estate/_mortgage/browse/vw_asset_real_estate_mortgage', ["data", "getRowHash", "*", "asset_real_estate_id='".$realEstateId."' AND active='1'", "", "1"]);
if (@{$mortgageValue}) { # is the line that shows the error
        $amortizationPeriodDetails = $mortgageValue->{amortization_period}||"";
}

我认为查询返回 null 因为条件没有值,但我该如何检查呢?

【问题讨论】:

  • 等一下;在你的第二行,$mortgageValue 是一个数组引用,在下一行它是一个哈希引用;真的是什么?
  • 没有strict refs 符号引用仍然是合法的。在这种情况下,您将覆盖$0,其中应该包含您的程序名称。让这成为符号引用是难以追踪错误的绝佳来源的另一个原因。

标签: perl catalyst


【解决方案1】:

理想情况下,forward 方法将返回 undef;有时返回 0 而 arrayref 有时更难使用的方法。但如果做不到这一点,你可以这样做:

if ( @{ $mortgageValue || [] } ) {

if ( $mortgageValue && @$mortgageValue ) {

【讨论】:

  • 即使forward 返回 undef,你也必须使用它们。
【解决方案2】:

$mortgageValue 不是数组引用。所以你不能取消引用它。看起来 $mortgageValue 是一个标量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 2014-12-08
    • 2011-12-19
    • 2014-01-18
    • 1970-01-01
    • 2012-04-13
    • 2017-08-20
    • 1970-01-01
    相关资源
    最近更新 更多