in reply to
Re^2: variable as hash name
in thread variable as hash name
so how is that superior to using an explicit "name" level in your hash? Using a variable as a name simply introduces exactly the same effect as adding a "name" level to a hash, but you have no easy way to debug your code. If you use a conventional hash you can use modules like Data::Dump (or better still, use an IDE or the debugger) to inspect the contents of the hash for debugging purposes. Consider:
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dump;
my @loci_codes = qw( Bet01 Bet05 Bet06 Bet12 );
my %data;
for my $dataIn (
qw(
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;;
)
)
{
my @alelos = split ";", $dataIn;
for my $code (@loci_codes) {
++$data{$code}{shift @alelos};
++$data{$code}{shift @alelos};
}
}
Data::Dump::dump(\%data);
for my $code (@loci_codes) {
print "$code: ";
print join ', ',
map {"$_ ($data{$code}{$_})"} sort {$a <=> $b} keys %{$data{$c
+ode}};
print "\n";
}
prints:
{
Bet01 => { 224 => 1, 230 => 2, 238 => 5 },
Bet05 => { "0" => 4, "101" => 2, "103" => 2 },
Bet06 => { 138 => 1, 146 => 7 },
Bet12 => { 108 => 1, 110 => 1, 112 => 3, 114 => 1, 116 => 1, 118 =>
+1 },
}
Bet01: 224 (1), 230 (2), 238 (5)
Bet05: 0 (4), 101 (2), 103 (2)
Bet06: 138 (1), 146 (7)
Bet12: 108 (1), 110 (1), 112 (3), 114 (1), 116 (1), 118 (1)
True laziness is hard work