我的perl程序中出现奇怪的错误消息

时间:2016-06-06 18:04:19

标签: perl

我在程序中有一些行:

  $data->{external_mf}->{pre_price} = nearest(.000001, MOA::CLSUtils::get_price( $data->{external_mf}->{pool_cusip}  ,$start_date) );     
  $data->{external_mf}->{pre_price} = ( defined ( $data->{external_mf}->{pre_price} ) ) ? $data->{external_mf}->{pre_price} : 0;     
  $data->{external_mf}->{pre_price} ||=0;    
  $data->{external_mf}->{pre_price} = nearest ( .01, $data->{external_mf}->{pre_price} ) if ( $&& $args->{port} !~ /20016|20026/);  

当我运行程序时,出现错误:

  

使用未初始化的价值$&按位和(&)at   G:\ invacct \ perl \ scripts \ pfi_ general_ledger_check.pl第286行。

第286行是上一段的最后一段。谁能告诉我它应该是什么?

1 个答案:

答案 0 :(得分:1)

问题出在这里

... if $& & $args->{port} !~ /20016|20026/;

解析为

$&

很难说出你的意思,但undef保持最后一个正则表达式匹配的字符串。这是$data->{external_mf}{pre_price} = nearest(0.01, $data->{external_mf}{pre_price} ) unless $args->{port} =~ /^200[12]6$/ ,大概是因为您以前在代码中没有使用正则表达式模式

看起来这可能已经足够了。请注意,您还必须锚定您的正则表达式模式,否则它将匹配任何子字符串而不是整个字符串

$data->{external_mf}{pre_price} = do {

    my $price = MOA::CLSUtils::get_price($data->{external_mf}{pool_cusip}, $start_date);

    if ( $price ) {
        my $precision = $args->{port} =~ /^200[12]6$/) ? 0.000001 : 0.01;
        $price = nearest($precision, $price);
    }
    else {
        $price = 0;
    }

    $price;
};


看到这些代码正确重构可能会有所帮助。我会这样写的

{{1}}