in reply to Array comparison doesn't work

To give you the full picture, it is possible to pass arrays as parameters and circumvent the flattening of those arrays.

That involves using subroutine prototypes and is probably one of the few acceptable uses of prototypes .

It goes as follows:

use Modern::Perl; sub two_arrays (\@\@) { my @first = @{$_[0]}; my @second = @{$_[1]}; say "First array: @first"; say "Second array: @second"; } my @one = qw/een twee drie/; my @two = qw/nung song saam/; two_arrays(@one, @two);
Output:
First array: een twee drie Second array: nung song saam
The prototype (\@\@) means that this subroutine takes two arrays as parameters and a reference to those two arrays will passed to the sub. This "referencing" will happen automatically and of course it means that you must dereference it inside of your sub.

It is not the usual or expected mode of operation of using subroutines and you better document this very clearly or people will get quite confused. But it is there if you want it.

CountZero

A program should be light and agile, its subroutines connected like a string of pearls. The spirit and intent of the program should be retained throughout. There should be neither too little or too much, neither needless loops nor useless variables, neither lack of structure nor overwhelming rigidity." - The Tao of Programming, 4.1 - Geoffrey James

My blog: Imperial Deltronics