我的perl脚本中的某个变量的输出低于输出 – 输出实际上来自一些可执行文件,我在这种情况下存储在变量$retval中 – 下面的示例
my $retval=`imp_vol -u 110.5 -s 110.9 -p 0.005 -t 0.041 -c 1` Black Scholes NVol = 1.19711 Black Scholes NDelta = 0.0494522 Black Scholes NGamma = 0.42176 Black Scholes NTheta = -0.302207 Black Scholes NVega = 0.0207006 Black Scholes Vol = 0.0108141 Black Scholes Delta = 0.049565 Black Scholes Gamma = 0.42329 Black Scholes Theta = -0.302212 Black Scholes Vega = 2.29159
这里imp_vol是我的可执行文件,具有不同的参数……它打印出不同的BLack Scholes值.现在我的目的是获得所有Black Scholes值 – 以下是我目前在perl脚本中使用的内容 –
if($retval=~/\s*Black\s+Scholes\s+Vol\s*\=\s*(.*)/i){ $vol=$1; } if($retval=~/\s*Black\s+Scholes\s+Delta\s*\=\s*(.*)/i){ $delta=$1; } if($retval=~/\s*Black\s+Scholes\s+Gamma\s*\=\s*(.*)/i){ $gamma=$1; } if($retval=~/\s*Black\s+Scholes\s+Theta\s*\=\s*(.*)/i){ $theta=$1; } if($retval=~/\s*Black\s+Scholes\s+Vega\s*\=\s*(.*)/i){ $vega=$1; } if($retval=~/\s*Black\s+Scholes\s+NVol\s*\=\s*(.*)/i){ $nvol=$1; } if($retval=~/\s*Black\s+Scholes\s+NDelta\s*\=\s*(.*)/i){ $ndelta=$1; } if($retval=~/\s*Black\s+Scholes\s+NGamma\s*\=\s*(.*)/i){ $ngamma=$1; } if($retval=~/\s*Black\s+Scholes\s+NTheta\s*\=\s*(.*)/i){ $ntheta=$1; } if($retval=~/\s*Black\s+Scholes\s+NVega\s*\=\s*(.*)/i){ $nvega=$1; }
任何帮助都会受到鼓掌
解决方法
您可以在哈希中收集它们:
use strict; use warnings; my $retval = <<HERE; Black Scholes NVol = 1.19711 Black Scholes NDelta = 0.0494522 Black Scholes NGamma = 0.42176 Black Scholes NTheta = -0.302207 Black Scholes NVega = 0.0207006 Black Scholes Vol = 0.0108141 Black Scholes Delta = 0.049565 Black Scholes Gamma = 0.42329 Black Scholes Theta = -0.302212 Black Scholes Vega = 2.29159 HERE my %h; while ($retval =~ /Black\s+Scholes\s+(\S*)\s*\=\s*(\S*)/ig) { $h{lc $1} = $2; } for my $k (keys %h) { print "$k,$h{$k}\n"; }
生产:
ntheta,-0.302207 nvega,0.0207006 ndelta,0.0494522 vol,0.0108141 theta,-0.302212 ngamma,0.42176 nvol,1.19711 vega,2.29159 delta,0.049565 gamma,0.42329