if ($SIRtrue && !($_ =~ /SPECint_base/)){
$SIR{$_}=$_;
}
if ($SFRtrue && !($_ =~ /SPECfp_base/)){
$SFR{$_}=$_;
}
You're stuffing the line you find into a hash key named the same as the line value. This is likely not what you want.
This may be closer to what you want (assuming my data below somewhat resembles your file), but it's honestly hard to say:
use strict;
use warnings;
use Data::Dumper;
my $str = <<END;
SPECint_base
1
2
3
SPECfp_base
4
5
6
END
open my $fh, '<', \$str or die "Could not open for read:$!\n";
my $SIRtrue;
my $SFRtrue;
my %SIR = ();
my %SFR = ();
while (<$fh>){
chomp;
if (/SPECint_base/){
$SIRtrue = 1;
$SFRtrue = 0;
next;
}
elsif (/SPECfp_base/){
$SIRtrue = 0;
$SFRtrue = 1;
next;
}
if ($SIRtrue)){
push( @{$SIR{SPECint_base}}, $_ );
}
elsif ($SFRtrue){
push( @{$SFR{SPECfp_base}}, $_ );
}
}
print Dumper(\%SIR);
print Dumper(\%SFR);
Output:
$VAR1 = {
'SPECint_base' => [
'1',
'2',
'3'
]
};
$VAR1 = {
'SPECfp_base' => [
'4',
'5',
'6'
]
};
|