こんばんは

引数に配列・ハッシュ・リファレンスのいずれかを受け取るサブルーチンを用意するのですが、
与えられた引数が配列とハッシュのどちらかであるか判別する方法はありませんか?
リファレンスを受け取る場合は !$#_ && ref($_[0]) で判別できるのですが、
@_%2 では引数が偶数個だった場合配列とハッシュを区別できません。
exists(${¥%{{@_}}}{keyname}) では引数の偶数番目にkeynameが含まれる配列をハッシュと誤ってしまいます。