This contrasts with my work in more established languages like C where I know that there is no way I could be doing it better.
Are you certain that there is no better way to do it in C? Maybe there's just no better way that's easy. For instance, in C you have to make the decision whether to use an array or a hash table, just like you do in Perl. Using an array is easy in C, because they're built into the language. Using a hash table is hard, because you have to either write all the hash table code yourself, or find someone else's code and figure out how to use it.
Sometimes, using a hash table is the better solution. They're extremely useful in many situations, so it seems that a language should make it easy to use them. And Perl, as we all know, makes easy things easy.
I sit in front of my screen, turning bits of the code around in my mind, because I'm not sure I've done it the best way. Even when it's finished, it's still not done.
Maybe you're entering the larval stage. Congratulations.