There are a number of details I would nit-pick about, but, after all, you're applying to be an intern, not the company guru. It looks mostly correct, I'll assume you've verified it works, and does what it's supposed to.
Two things I would suggest, however.
- use autodie ':all'; then you don't need to check open(), close(), system calls for success or failure. The call will die automatically, with appropriate error message, if anything goes wrong. And if you DO want to trap errors, use autodie, and then use Try::Tiny to implement a try{}catch{} block.
- I was gonna suggest something about DBI, but it looks like only one actually query is used.
As Occam said: Entia non sunt multiplicanda praeter necessitatem.