Although it is not available yet, I am working on a perl module for the packet construction library
libnet. It includes ethernet packet construction and injection, but as of yet I have had difficulty implement those functions properly because of issues with XS and struct's and the like as per the question I posted
here. If I had any way of resolving these issues that I knew of, it would surely be simple to make it work. But for the time being, you and I are in the same boat :(