Hello Jeroen.

Jeroen Lodewijks wrote:
>
> I have a question. I have a sub which build a hash of list values.
> I want to put those list values directly into some local variables
> but I am unable to get the syntax right.
>
> I have something like this at the moment:
>
> sub FillHash
> {
>    my($db) = @_;
> my (%formatrules);
> my $lcsr;
> my @values;
>
>    $lcsr = $db->prepare(<<'') || ataerr::dbprepare($db);
> SELECT index1_value, index2_value, result1_value, result2_value
> FROM derived_attribute_array
> WHERE derived_attribute_id = (SELECT derived_attribute_id
>                                  FROM derived_attribute_history
>                                 WHERE derived_attribute_name = ?
>                                   AND SYSDATE BETWEEN
> effective_start_date AND effective_end_date)
>
> if ($lcsr->execute($DA_TABLE)) {
>     while (@values = $lcsr->fetchrow) {
>     $formatrules{$values[0], $values[1]} = [EMAIL PROTECTED];
>     }
>    }
>    $lcsr->finish;
>
> return %formatrules;
> }
>
>
> my (%formatrules) = FillHashFromDerived;
>
>
> $billing_output_format = $formatrules{$invoice_format_id,
> $mandant_id}[0]; $mandant = $formatrules{$invoice_format_id,
> $mandant_id}[1]; $destination_key = $formatrules{$invoice_format_id,
> $mandant_id}[2]; $split_key = $formatrules{$invoice_format_id,
> $mandant_id}[3];
>
> This works but I want to replace the last bit with something like:
> ($billing_output_format, $mandant, $destination_key, $split_key) =
> @formatrules{$invoice_format_id, $mandant_id};
>
> Everytime I try something like this it errors or returns nothing.
>
> What is the correct syntax?

You need to dereference the array reference:

    $formatrules{$invoice_format_id, $mandant_id}

like this:

    @{$formatrules{$invoice_format_id, $mandant_id}}

or, more neatly:

    my $data = $formatrules{$invoice_format_id, $mandant_id};
    ($billing_output_format, $mandant, $destination_key, $split_key) =
@$data;

HTH,

Rob









-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to