ОК, поэтому, во-первых, я бы сказал, что хранение ваших данных в подстроках - неправильный способ сделать это. Разложите их на пары ключ-значение:
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;
my %hoh;
$hoh{"string 1"}{conf} = 'SMA_long = 712 SMA_short = 38 decay = 0.0076 learning_rate = 0.27 min_predictions = 20 momentum = 0.09 price_buffer_len = 88 threshold_buy_bear = 2.5 threshold_buy_bull = 1.9 threshold_sell_bear = -0.6 threshold_sell_bull = -0.6';
$hoh{"string 5"}{conf} = 'SMA_long = 712 SMA_short = 38 decay = 0.0076 learning_rate = 0.27 min_predictions = 20 momentum = 0.09 price_buffer_len = 88 threshold_buy_bear = 2.5 threshold_buy_bull = 2.1 threshold_sell_bear = -0.6 threshold_sell_bull = -0.6';
$hoh{"string 8"}{conf} = 'SMA_long = 712 SMA_short = 38 decay = 0.0076 learning_rate = 0.27 min_predictions = 20 momentum = 0.09 price_buffer_len = 88 threshold_buy_bear = 2.4 threshold_buy_bull = 2.1 threshold_sell_bear = -0.6 threshold_sell_bull = -0.7';
$hoh{"another string 1"}{conf} = 'threshold_buy_bear = 2.5 HNA_long = 712 aaaaa = 0.0076 ccccc = 0.27 bbbbbbb = 1.9 dedede = -0.6 threshold = -0.6';
$hoh{"another string 2"}{conf} = 'threshold_buy_bear = 2.5 HNA_long = 712 aaaaa = 0.0076 ccccc = 0.27 bbbbbbb = 2.1 dedede = -0.5 threshold = -0.6';
$hoh{"another string 3"}{conf} = 'threshold_buy_bear = 2.5 HNA_long = 712 aaaaa = 0.0076 ccccc = 0.27 bbbbbbb = 2.0 dedede = -0.6 threshold = -0.6';
print Dumper \%hoh;
foreach my $conf ( values %hoh ) {
print $conf -> {conf};
$conf = { map { /(\w+) = ([\d\.\-]+)/g } $conf -> {conf} };
}
print Dumper \%hoh;
Таким образом, вы получите %hoh
:
$VAR1 = {
'another string 2' => {
'threshold' => '-0.6',
'ccccc' => '0.27',
'bbbbbbb' => '2.1',
'dedede' => '-0.5',
'threshold_buy_bear' => '2.5',
'HNA_long' => '712',
'aaaaa' => '0.0076'
},
... и т. Д.
Теперь я не могу сказать, откуда берутся ваши "значения" во втором примере, но, надеюсь, будет намного проще сравнивать.
Вы можете получить 3 значения, которые я думаю вы ищете:
foreach my $key ( keys %hoh ) {
print $key, " => ", $hoh{$key}{threshold_buy_bear},"\n";
}
Или просто сделайте это с ломтиком хеша:
my @values = qw ( threshold_buy_bear threshold_buy_bull threshold_sell_bull );
foreach my $key ( sort keys %hoh ) {
print $key, " => ", join ( " ", @{$hoh{$key}}{@values} ), "\n";
}