You write that the code you post is your first attempt at a Perl class. As a learning exercise, I think it's valuable to experiment with rolling (or stealing) your own. Perl has a minimal, to me elegant way to get object behavior.

If you'll be playing around a bit, you might like rewriting you class a few different ways. For my simple-minded application, Audio::Nama, I found Object::Tiny's accessors and class creation to be a good starting point. I filled out Alias++'s basic code with simple set() and dump() methods, spent a few days hacking together some YAML-based serialization routines and was on my way. I may change over to Mouse or Moose at some future time.

I found that a good environment to learn the types of compile and runtime errors I would get, how subclassing works, etc.

Regarding your code, first, redefining a subroutine is no big deal: if it's convenient to do so, do it and suppress the warning: no warnings 'redefine'. It's your first class, after all.

Also you may like a more legible format for your default initializations:

When putting a smiley right before a closing parenthesis, do you:

Use two parentheses: (Like this: :) )
Use one parenthesis: (Like this: :)
Reverse direction of the smiley: (Like this: (: )
Use angle/square brackets instead of parentheses
Use C-style commenting to set the smiley off from the closing parenthesis
Make the smiley a dunce: (:>
I disapprove of emoticons
Other