Perl grepping类似的单词

前端之家收集整理的这篇文章主要介绍了Perl grepping类似的单词前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的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

猜你在找的Perl相关文章