Perl Monk, Perl Meditation PerlMonks

### Re^2: memory issues

by asqwerty (Acolyte)
 on Jan 28, 2013 at 09:24 UTC ( #1015652=note: print w/replies, xml ) Need Help??

in reply to Re: memory issues

Thanks!!!! It works fine now and, as you said, substantially faster also. This is what I did,
```foreach my \$pair (@lpairs) {
my \$n = 0;
my \$z = 0;
my \$hl;
my \$pvalue = 0;
my \$pvt = 0;
my \$fk;
foreach \$fk (%ipairs) {
if( exists \$ipairs{\$fk} &&  exists \$ipairs{\$fk}{\$pair} &&  exi
+sts \$ipairs{\$fk}{\$pair}{'pvalue'}){
#if(\$ipairs{\$fk}{\$pair}{'pvalue'}){
\$pvt = \$ipairs{\$fk}{\$pair}{'pvalue'};
if(\$pvt){
unless(\$hl){
}
\$n++;
\$z+= qnorm(\$ipairs{\$fk}{\$pair}{'pvalue'});
}
}
}
if(\$n>2){
\$z = \$z/sqrt(\$n);
\$pvalue = pnorm(\$z);
}
if (\$pvalue) {
#printf "\$pair -> %.4f\n", \$pvalue;
printf OF "\$hl %.4f \$n\n", \$pvalue;
}

}

Replies are listed 'Best First'.
Re^3: memory issues
by Anonymous Monk on Jan 28, 2013 at 17:01 UTC

Just a small hint to reduce the verboseness of your code:

```    (\$ipairs{\$fk}{\$dline}{'head'}, \$ipairs{\$fk}{\$dline}{'effect'}, \$ip
+airs{\$fk}{\$dline}{'pvalue'}) = \$ldata{\$dline} =~ /^(.*)\s+(\d\.\d+)\s
++\d\.\d+\s+(\d\.\d+)\$/;

can be rewritten using a hash slice like this:

```    ( @{ \$ipairs{\$fk}{\$dline} }{qw/head effect pvalue/} ) = \$ldata{\$dl
+ine} =~ /^(.*)\s+(\d\.\d+)\s+\d\.\d+\s+(\d\.\d+)\$/;

Otherwise, your code benefits from a temporary variable or two. Here I repurpose \$pvt (not sure if the variable name makes sense after that):

```    \$pvt = \$ipairs{\$fk}{\$pair};
if(\$pvt->{'pvalue'}){
unless(\$hl){
}
\$n++;
\$z+= qnorm(\$pvt->{'pvalue'});
}

(This only works because there already exists a hash reference at \$ipairs{\$fk}{\$pair}. It would not work if you tried to say \$pvt = {}, but %\$pvt = () would. It's all reference magic and not really easy to explain unless you first understand pointers.)

(Of course, the hash slice can be rewritten using a temporary variable, too. It's always a good idea to use temporary variables if it makes your code easier to understand. Triply a good idea if it reduces repetition.)

Create A New User
Node Status?
node history
Node Type: note [id://1015652]
help
Chatterbox?
What's the matter? Cat got your tongue?...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (2)
As of 2017-08-18 03:30 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
Who is your favorite scientist and why?

Results (294 votes). Check out past polls.

Notices?