Link Perl/Tkでブラウザを作ってみる

[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 文字列

050712.png
↑スクリーンショット

しかしコードを書き終わって致命的なことが発覚!
Perl/Tkが日本語表示に対応してねぇ!
てことで残念ながらPerl/Tkシリーズは終了・・・
早かったネ
Qtシリーズもいつのまにか終わってるし。。。

2005,07,12 : 23:25 | 修正 | トラックバック (0)

Trackback
このエントリーのトラックバックURL:

2004 All rights reserved

Movable Type 4.1b2-en