I just want to add why you are printing the value of '1', other monks have already pointed out a fix to your problem.
Your code,
print length(@attrvals); is equivalent to
print length( scalar @attrvals );, which is equivalent to
print length("2"), which prints "1", the length of string "2".
Run the demo code below -
my @array = 0..99; # 100 element array
print length(@array);
The output is 3, since the string "100" (elements) has 3 characters.