--- /dev/null
+package wol;
+
+use warnings;
+use strict;
+
+use IO::Socket::INET;
+
+sub power_on {
+ my ($mac,$host,$port) = @_;
+
+ $mac ||= 'FF:FF:FF:FF:FF:FF';
+ $host ||= '255.255.255.255';
+ $port ||= 9; # discard
+
+ my $sock = IO::Socket::INET->new( Proto=>'udp' );
+ my $ip_addr = inet_aton($host);
+ my $sock_addr = sockaddr_in($port, $ip_addr);
+ $mac =~ s{:}{}g;
+
+ my $packet = pack('C6H*', 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, $mac x 16);
+
+ setsockopt($sock, SOL_SOCKET, SO_BROADCAST, 1);
+ send($sock, $packet, 0, $sock_addr);
+ close ($sock);
+}
+
+1;