Why "Not an ARRAY reference" error?
        Posted  
        
            by 
                Sandra Schlichting
            
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Sandra Schlichting
        
        
        
        Published on 2011-03-14T16:07:21Z
        Indexed on 
            2011/03/14
            16:10 UTC
        
        
        Read the original article
        Hit count: 363
        
I have this script
#!/usr/bin/perl
use strict;
use warnings;
use yy;
my $data = [
    ["aax", "ert", "ddd"],
    ["asx", "eer", "kkk"],
    ["xkk", "fff", "lll"],
    ["xxj", "vtt", "lle"],
    ];
use Test::More tests => 4;
is(yy::type1_to_type2(\$data, 'aax'), 'ert');
is(yy::type1_to_type3(\$data, 'asx'), 'kkk');
is(yy::type2_to_type3(\$data, 'fff'), 'lll');
is(yy::type3_to_type1(\$data, 'lle'), 'xxj');
which uses this module
package yy;
sub typeX_to_typeY {
    my ($x, $y, $data, $str) = @_;
    foreach (@$data) {
    if ($_->[$x - 1] eq $str) {
        return $_->[$y - 1];
    }
    }
    return;
}
sub type1_to_type2 { typeX_to_typeY(1, 2, @_) }
sub type1_to_type3 { typeX_to_typeY(1, 3, @_) }
sub type2_to_type1 { typeX_to_typeY(2, 1, @_) }
sub type2_to_type3 { typeX_to_typeY(2, 3, @_) }
sub type3_to_type1 { typeX_to_typeY(3, 1, @_) }
sub type3_to_type2 { typeX_to_typeY(3, 2, @_) }
1;
and gives this error
Not an ARRAY reference at yy.pm line 6.
# Looks like your test died before it could output anything.
The line it complains about is
foreach (@$data) {
Isn't this the way to pass an array reference?
What am I doing wrong?
© Stack Overflow or respective owner