[Pdx-pm] Different data structures for Hash of array, same code (mostly)

J. Shirley jshirley at gmail.com
Wed Nov 18 13:15:09 PST 2009


Is it intentional, ironic or just amusing that you are referring to Perl as
"Pearl"? :)

-J

2009/11/18 Daniel Herrington <dherrington at robertmarktech.com>

>  All,
>
> Hans, that deref was the problem, thanks. Verbosity tends to be a holdover
> from when I was less secure in my Pearl coding and wanted to know exactly
> what I did. I refactor towards verbosity when I run into problems, which in
> this case didn't actually help solve anything. I was actually using the
> following when i went to test and noticed the issue:
>
> push (@{$newBoxNameH{$newBoxName}}, $newJobName);
>
> This replaced that whole code snippet in B.
>
> Shlomi, thanks for the tips. The Code in snippet A was from over a year
> ago, before I started getting serious with Pearl and learned about how to
> handle complex data structure and dereferencing. I know I need to go back
> and refactor the sub that A came from, and one day as God is my witness I
> will ;) As always, time is the issue.
>
> The variable names aren't meant to be Hungarian, just simply how I started
> with Pearl and identifying an array from a hash, etc. Now it's just laziness
> as those names pop into my head when thinking of new variables. I do like my
> variables to be somewhat related to the data they contain, but it's an
> evolving standard in my head.
>
> Again, thanks all for the help and sorry for the double post.
>
> Dan H.
>
>
> Hans Dieter Pearcey wrote:
>
> Excerpts from Daniel Herrington's message of Wed Nov 18 10:12:07 -0500 2009:
>
>
>         my @arJobNamesB = $ref_arJobNamesB;
>
>
>  I bet you meant '@$ref_arJobNamesB'.
>
> Your code would probably be easier to skim for this kind of thing if it were
> less verbose.  For example:
>
>
>
>             if ($newBoxNameH{$newBoxName}) {
>                my $ref_arJobNames = $newBoxNameH{$newBoxName};
>                my @arJobNames = @$ref_arJobNames;
>                push (@arJobNames,$newJobName);
>                $newBoxNameH{$newBoxName} = \@arJobNames;
>            } else {
>                my @arJobNames;
>                push (@arJobNames,$newJobName);
>                $newBoxNameH{$newBoxName} = \@arJobNames;
>            }
>
>
>    my @foo;
>   push @foo, $x;
>   $thing = \@foo;
>
> can be much more easily written as
>
>   $thing = [ $x ];
>
> In fact, the whole conditional I quoted above could be one line.
>
>   push @{ $newBoxNameH{$newBoxName} }, $newJobName;
>
> Perl will automatically turn the nonexistent hash element into an array
> reference for you.  If this is too magical for your taste, default it to an
> empty arrayref first:
>
>   $newBoxNameH{$newBoxName} ||= [];
>
> hdp.
> _______________________________________________
> Pdx-pm-list mailing listPdx-pm-list at pm.orghttp://mail.pm.org/mailman/listinfo/pdx-pm-list
>
>
> _______________________________________________
> Pdx-pm-list mailing list
> Pdx-pm-list at pm.org
> http://mail.pm.org/mailman/listinfo/pdx-pm-list
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/pdx-pm-list/attachments/20091118/b413a9e3/attachment.html>


More information about the Pdx-pm-list mailing list