in reply to How to pass two arrays to a sub?

I guess you would reply that you ARE using prototypes, but I doubt you are using strict and warnings. If you were then you would get "Request::aaa() called too early to check prototype".
The @ prototype is pretty useless. It accepts a list (not just an array), a single scalar (since that is a single entry list), and even nothing, since an empty list is still a valid list.
Yes you need to use references for this:
use warnings; use strict; sub Request::aaa(\@\@); #main.pl my @a1 = qw (the quick brown fox); my @a2 = qw (theres more than one way); Request::aaa(@a1, @a2); package Request; sub aaa(\@\@) { my @array1 = @{shift()}; my @array2 = @{shift()}; } 1;
Notice how the prototype has to be pre-defined, like with C/C++. Very few people like or understand prototypes, so it might be better to use:
use warnings; use strict; #main.pl my @a1 = qw (the quick brown fox); my @a2 = qw (theres more than one way); Request::aaa(\@a1, \@a2); package Request; sub aaa { my @array1 = @{shift()}; my @array2 = @{shift()}; } 1;

Here the caller has to know that a reference is being passed - that's the \ in front of the array (\@a1, \@a2)