Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

Re^2: variable as hash name

by blackzero (Acolyte)
on Dec 08, 2012 at 10:25 UTC ( #1007885=note: print w/ replies, xml ) Need Help??


in reply to Re: variable as hash name
in thread variable as hash name

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.


Comment on Re^2: variable as hash name
Download Code
Re^3: variable as hash name
by tobyink (Abbot) on Dec 08, 2012 at 10:42 UTC

    Here's your program modified to work with use strict:

    #!/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; my %LOCI; foreach my $line ( @inputs ) { my @alelos = split ";", $line; foreach my $locus ( @loci_codes ) { my $allele1 = shift @alelos; my $allele2 = shift @alelos; $LOCI{$locus}{$allele1} += 1; $LOCI{$locus}{$allele2} += 1; } } foreach my $locus ( @loci_codes ) { foreach my $key ( keys ( %{$LOCI{$locus}} ) ) { print "$locus ", $key, " = ", $LOCI{$locus}{$key}, "\n"; } }

    Is that so hard?

    perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'

      o/

      That worked!

      tobyink solution really worked!

      I implemented it in my real code and its working nicely.

      Sorry if I was a bit rude. I was really stressed with that problem. This hash of hashes thing seems really trick when I look at it in other forums. As you can guess, I'm new at perl programming. I know that is not excuse.

      Thank you very much for the help

      . .

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1007885]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (11)
As of 2015-07-03 13:03 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (53 votes), past polls