in reply to Problem with perlcritic when using Moose object

Based on the perlcritic message autoderef is deprecated [...]  Use of each/keys/pop/push/shift/splice/unshift/values on a reference is an experimental feature..., it seems to think your key called 'shift' is the shift() builtin. Does the same thing happen if you renamed 'shift' to 'working_shift' in the example code (sorry, I don't have perlcritic, otherwise I'd try before posting). Alternately, what if you used $hash->{'shift'}, to make sure it disambiguates for perl and perlcritic

... Actually, thinking about it, it might also be the method named 'shift' which is triggering perlcritic to complain about it, even though perl knows you're referencing the method, not the builtin. Either way, (temporarily) renaming the 'shift' attribute should tell you whether that's the problem.