[Perl]
日本語文字コード変換をJcodeモジュールで行うと
機種依存文字『①,Ⅰ,℡,㈱』が?に文字化けしてしまいます.
この問題に対処するにはUnicode::Japaneseモジュールを使います.
CPAN経由でモジュールをインストールしましょう.
# cpan
cpan>install Unicode::Japanese
使い方
use Unicode::Japanese;
# $valueの文字コードをEUCに変換
$value = Unicode::Japanese->new($value,"auto")->euc;
# $valueの文字コードをShift-JISに変換
$value = Unicode::Japanese->new($value,"auto")->sjis;
他にも全角を半角にしたり,カタカナをひらがなにしたりできます.
[Perl]
外部から家のPCの電源を入れるスクリプトを作ってみた。
実装はPerlで、CGIでWeb上からアクセスして電源を入れるように。
WakeOnLanという機能を利用しております。
foreach (split /:/, $hwaddr) {
$pkt .= chr(hex($_));
}
$pkt = chr(0xFF) x 6 . $pkt x 16;
↑これでマジックパケットという特殊なパケットを生成します
$raddr = gethostbyname('255.255.255.255');
$them = pack_sockaddr_in($DEFAULT_PORT, $raddr);
$proto = getprotobyname('udp');
#UDPの接続用ソケットを生成
socket(S, AF_INET, SOCK_DGRAM, $proto) or die "socket : $!";
#ブロードキャストを指定
setsockopt(S, SOL_SOCKET, SO_BROADCAST, 1) or die "setsockopt : $!";
#パケット送信
send(S, $pkt, 0, $them) or die "send : $!";
close S;
↑これをUDPでブロードキャストすることにより、
他のマシンのPC電源を入れることが可能に!
2005,07,23 : 23:52 | 修正 | トラックバック (0)
[Perl]
今日はPerl/Tkで実用的なアプリを作ってみようということで、
簡易ブラウザ(ソースを表示)を作ってみます。
ソースコードは以下のようになりました。
#!/usr/bin/perl
use Socket;
use Jcode;
use Tk;
$top = MainWindow->new();
$top->title('browser');
$url = "http://";
$top->Entry( -textvariable => \$url )->pack();
$t0 = $top->Scrolled('Text',-scrollbars=>'se',-wrap=>'none')->pack(-expand=>'Exit',-fill=>'both');
sub pushed {
$t0->insert('end', &readbuf($url));
}
$top->Button( -text => 'Get', -command => \&pushed )->pack();
MainLoop();
sub readbuf {
$_[0] =~ /^http:\/\/(.+)\/(.*)$/;
my $host = $1;
my $port = getservbyname('http','tcp');
my $iaddr = inet_aton($host)
or die "Not found\n";
my $sock_addr = pack_sockaddr_in($port,$iaddr);
my $buffer;
socket(SOCKET,PF_INET,SOCK_STREAM,0)
or die "Can't create socket\n";
connect(SOCKET,$sock_addr)
or die "Can't connect\n";
select(SOCKET);
$|=1;
select(STDOUT);
print SOCKET "GET /$2 HTTP/1.0\r\n";
print SOCKET "\r\n";
while(<SOCKET>){
m/^\r\n$/ and last;
}
while(<SOCKET>){
$buffer .= jcode($_)->euc;
}
return $buffer;
}
Perlのソケット通信の流れ(重要)
$port = getservbyname('http','tcp');
$iaddr = inet_aton($host) or die "Not found\n";
$sock_addr = pack_sockaddr_in($port,$iaddr);
socket(SOCKET,PF_INET,SOCK_STREAM,0) or die "Can't create socket\n";
connect(SOCKET,$sock_addr) or die "Can't connect\n";
print SOCKET 文字列
しかしコードを書き終わって致命的なことが発覚!
Perl/Tkが日本語表示に対応してねぇ!
てことで残念ながらPerl/Tkシリーズは終了・・・
早かったネ
Qtシリーズもいつのまにか終わってるし。。。
2005,07,12 : 23:25 | 修正 | トラックバック (0)
[Perl]
Perl/Tkを使えばわずか数行でGUIアプリが書けます。
素晴しい時代ですね?
もうLinux使うしかないですネ。
スキルアップのためにしばらく使い込んでみます。
Perl/TkはPerl言語にTkモジュールを組み込んだものです。
非常に簡単なコードでGUIアプリが書けます。
以下のコードをエディタで書いてみましょう。
#!/usr/bin/perl
use Tk;
$top = MainWindow->new();
$button = $top->Button( -text => 'perl/tk' );
$button->pack();
MainLoop();
ファイルに実行権をあたえて下さい。
# chmod +x test1.pl

↑こんなボタンが表示されましたか?
2005,07,11 : 23:18 | 修正 | トラックバック (0)

