Good answer! I completely agree that a lot can be said for "reinventing the wheel"!
In addition to "learning how to make one" and "learning some new tools":
- Often, you need a special wheel that best fits your particular needs.
- There's the possibility that you'll stumble onto a better/faster way to make "one"
- You'll learn the tradeoffs involved in making "one"
- There may be common mistakes associated with the particular "wheel" you're (re)inventing, so overcoming these mistakes will make you a better programmer
- If you've reinvented it several times (or several dozen times), it may take you only a moment to create it in a future program.
- You get just as much experience writing something that already exists as you do writing something new.
- After you write it yourself, you can go evaluate the one that already exists (probably at cpan), and see how you did!
Think what the consequences would have been back in 1987 if Larry Wall hadn't "reinvented the wheel" when he wanted something more powerful than sed
to program in!