in reply to passing paramters to a sub

Other monks have already pointed you in the right direction with passing structures by reference.

I just want to point out that it is possible not to pass by reference for your benefit.

A simple hash basically has keys and corresponding values. Knowning this, you can write your code like this:
whatever(%hash, $val) ... sub whatever { my $v = pop; my %h = @_; # %hash was expanded into list of key-value pairs # reconstruct hash from array of key-value pairs ... }