On Jul 11, rory oconnor said:

>Is it possible to pass a hash into a subroutine to be used as a local
>variable?  I'm trying to do this:

The arguments sent to a function are flattened into one big list.  There's
no way to know where your array ends and your hash begins.  Furthermore,
doing

  $x = 1;
  @y = (2,3);
  %z = (4 => 5);

  ($a, @b, %c) = ($x, @y, %z);

stores 1 in $a, (2, 3, 4, 5) in @b, and nothing in %c.

You'll need to send REFERENCES.

>($rows, %results) = &Select($mytable, $where_f1, $compare1, $where_v1,
>@quick_check, %field_values);
>
>sub Select {
>my($db_table, $where_field, $comparison, $where_value,@fieldlist,
>%values) = @_;
>
>.....
>
>return $rc, %table;
>} 

  ($rows, %results) = Select(
    $mytable, $where_f1, $compare1, $where_v1, \@quick, \%field
  );

  sub Select {
    my ($db, $where_field, $comp, $where_value, $flref, $vref) = @_;
    my @fieldlist = @$flref;
    my %values = %$vref;
    ...
    return $rc, %table;
  }

Or, instead of doing the @$flref and %$vref thing, you can use the
references directly in the function.  Instead of $fieldlist[$i], you would
use $flref->[$i]; instead of $values{key}, you would use $vref->{key}.

And you might want to return a reference to the hash instead of the hash
itself.  Just an idea.

-- 
Jeff "japhy" Pinyan      [EMAIL PROTECTED]      http://www.pobox.com/~japhy/
RPI Acacia brother #734   http://www.perlmonks.org/   http://www.cpan.org/
** Look for "Regular Expressions in Perl" published by Manning, in 2002 **
<stu> what does y/// stand for?  <tenderpuss> why, yansliterate of course.
[  I'm looking for programming work.  If you like my work, let me know.  ]


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

Reply via email to