我在程序中有一些行:
$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行是上一段的最后一段。谁能告诉我它应该是什么?
答案 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}}