in reply to Perl OO and dereferincing help

You should probably be accessing the data directly, and using something like pop or unshift instead of this naive reimplementation. I don't mean to sound harsh, but these are basic list operations, one of the things the Llama Book covers pretty much first thing. Learn them and use them. They are surprisingly efficient.

The idea would be something like this:
sub remove_card { my ($self) = @_; return pop(@{$self->{cards}}); # Returns nth element }
So it would seem you're making a haystack out of a needle, to use a mangled metaphor.

Your problem was that you were sending a list to your cards function, which you then use as an array reference. If you'd put square brackets around what you were passing it, it would've worked, but then, this is probably for the best because it would be really clunky.
$self->cards([$self->cards()->[1..$self->num()-1]]);
You'll note that you're calling the function twice, creating an anonymous array, and you still haven't even returned the correct value.