[Pdx-pm] Different data structures for Hash of array, same code (mostly)
Daniel Herrington
dherrington at robertmarktech.com
Wed Nov 18 13:22:01 PST 2009
Problems with my dictionary...that's been fixed.
J. Shirley wrote:
> 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
> <mailto: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 list
>> Pdx-pm-list at pm.org <mailto:Pdx-pm-list at pm.org>
>> http://mail.pm.org/mailman/listinfo/pdx-pm-list
>>
>
> _______________________________________________
> Pdx-pm-list mailing list
> Pdx-pm-list at pm.org <mailto:Pdx-pm-list at pm.org>
> http://mail.pm.org/mailman/listinfo/pdx-pm-list
>
>
>
--
Daniel B. Herrington
Director of Field Services
Robert Mark Technologies
dherrington at robertmarktechnologies.com
o: 651-769-2574
m: 503-358-8575
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/pdx-pm-list/attachments/20091118/7da12ce9/attachment.html>
More information about the Pdx-pm-list
mailing list