I definitely agree that you should take advantage of Perl's rich syntax, even though I lean towards a verbose code style myself. The main issue I had with your meditation was about constructor arguments, and that was already addressed by Moritz.
I'd still like to comment on the bit about debugging. I tend to shuffle any logic for debugging into a sub, and invoke that sub whenever I need something dumped:
# Skipping boilerplate pragmas ...
use constant DEBUG => 1;
sub debug {
if (DEBUG) {
say STDERR (ref $_[0]) ? Dumper $_[0] : $_[0];
}
}
debug("Something is on fire");
debug([ qw(fire famine flood) ]);
This way I can easily change what I mean when I say debug - print to STDERR, log to a file, dump to a database, summon the remote controlled sky writing airplane, whatever. It's really just another opportunity to avoid copy and paste coding.