CPANにあるIO::Socketを使うとソケット通信ができる。

usestrict;

usewarnings;

useIO::Socket;

my$sock=IO::Socket::INET->new(PeerAddr=>’192.168.0.180′,

PeerPort=>’50001′,

Proto=>’tcp’);

$sock->send(“zanmaizanmai”);

これだけで、192.168.0.180の50001番ポートにTCP接続で、「zanmaizanmai」というデータが送られる。

前に作ったLivedoor天気情報から東京の天気を取得するに組み合わせるとこうなった。



send-weather.pl

usestrict;

usewarnings;

useEncode;

useLWP::Simple;

useXML::RSS;

useIO::Socket;

my$addr=shift;

my$port=shift;

my$url=”http://weather.livedoor.com/forecast/rss/3.xml”;

my$document=get($url)

||die”can’tgetcontentfrom$url¥n”;

my$rss=XML::RSS->new;

$rss->parse($document);

my$sock=IO::Socket::INET->new(PeerAddr=>$addr,

PeerPort=>$port,

Proto=>’tcp’);

for(@{$rss->{items}}){

my$title=encode(‘utf8’,$_->{title});

if($title=~”東京”){

if($title=~”雨”){

$sock->send(“rainy”);

}

elsif($title=~”曇”){

$sock->send(“cloudy”);

}

else{

$sock->send(“shiny”);

}

}

}

こいつを使って

perl send-weather.pl 192.168.0.180 50001

すると、192.168.0.180の50001番ポートに、現在の天気が”shiny” “cloudy” “rainy”のどれかで通知される。

さらにs.h.log: XPortをEthernet-UARTコンバータとして使うと組み合わせると、マイコンにUARTで現在の天気をpushしてやれる。