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!