Net::Address::Ethernet seems to use a variety of methods to grab the hardware address of your ethernet card. It works on my Windows 2k laptop and on Linux. I'm guessing that the other systems you specify will work too.
Update: I thought on it a bit more and realized that this is probably the module that you looked at on CPAN. As other monks have pointed out, there isn't really a universal solution. This module can use ipconfig, ifconfig and arp to get the hardware address, which should cover a really large percentage of the operating systems (or rather OS installations) that run Perl.