You see, is not that I'm not open to alternatives. Is just that I read a lot of foruns adressing this problem (of use variavles as variables name) and as much as I tried, I was unable to use hash of hashes to solve my needs.
So I wanted to use the dirt way because I needed to solve it fast. But YES, I would like to improve my code to not have to disable strict. And I am thankfull for your help.
So here is the code I'm using now. Any improvement is welcome.
#!/usr/bin/perl
#use strict;
use warnings;
my $input_data = << 'REPORT_OF_INPUT';
Bet01;;Bet05;;Bet06;;Bet12;;
230;238;101;103;138;146;112;116;;
230;238;101;103;146;146;108;112;;
224;238;0;0;146;146;110;118;;
238;238;0;0;146;146;112;114;;
REPORT_OF_INPUT
my @inputs = split "\n", $input_data;
my $line = shift @inputs;
$line =~ s/;;/;/g;
my @loci_codes = split ";", $line;
foreach $line ( @inputs )
{
my @alelos = split ";", $line;
foreach my $locus ( @loci_codes )
{
no strict 'refs';
my $allele1 = shift @alelos;
my $allele2 = shift @alelos;
${$locus}{$allele1} += 1;
${$locus}{$allele2} += 1;
}
}
foreach $locus ( @loci_codes )
{
foreach my $key ( keys ( %{$locus} ) )
{
print "$locus ", $key, " = ", $$locus{$key}, "\n";
}
}
I'm using the data inside the code here just to make it easier for decode. But in my real program the content of $input_data will come from an external file. So its content may vary.
|