On Tuesday 13 November 2007 09:55, [EMAIL PROTECTED] wrote:
> Folks,

Hello,

> I am having a problem dereferencing a hash and am hoping somebody can
> assist.  I am getting the error:

It appears that you are actually having a problem creating a reference 
to a hash.

perldoc perldata
perldoc perldsc
perldoc perllol
perldoc perlreftut
perldoc perlref


>                 Can't use string ("napMD_ProgressCode") as a HASH ref
> while "strict refs" in use
>
> for the code below.  I have tried various combinations of brackets
> and plus signs in the subroutine to dereference the HoH to no avail.
> Thanks in advance for setting me straight on how to do this properly.
>
>
> ==========
> use strict;
> my %napMD_ProgressCode = (
>         1 => {
>                 Code => 'ProgCd',
>                 Name => 'MD_ProgressCode',
>                 Definition => 'status of the dataset or progress of a
> review'
>         },
>         2 => {
>                 Code => '001',
>                 Name => 'completed',
>                 Definition => 'production of the data has been
> completed'
>         },
>         3 => {
>                 Code => '002',
>                 Name => 'historicalArchive',
>                 Definition => 'data has been stored in an offline
> storage facility'
>         }
> );
> sub drawInputRowControlled{
>       my $ControlList = $_[0];
>       my %ControlList = %$ControlList;  #Problem line

You are creating a copy of the hash.  Why not just pass the whole hash 
in the first place:

        my %ControlList = @_;


>       for my $i (sort keys %ControlList) {
>               print qq{
>                       <input type="checkbox"
>                       name='status'
>                       
> value="$ControlList{$i}{Code}">$ControlList{$i}{Name}</option><br>
>               }
>    }

It you are using a scalar that contains a reference to a hash then you 
don't need to make a copy of it, you can access it through the 
reference:

        for my $i (sort keys %$ControlList) {
                print qq{
                        <input type="checkbox"
                        name='status'
                        
value="$ControlList->{$i}{Code}">$ControlList->{$i}{Name}</option><br>
                }
        }


> }
>
> drawInputRowControlled('napMD_ProgressCode');

You are passing a string to your subroutine.  You need to pass a 
reference to the hash instead:

drawInputRowControlled( \%napMD_ProgressCode );



John
-- 
use Perl;
program
fulfillment

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to