Tue 11/28, 2006

Perl メモ [Computer and Networking ]

某所で Perl のプログラミングに悩んでいる例があったのでちょっと考えてみる。

配列値の undef 要素
  my @a = ('A', undef, 'B');
  my $s = join(',', @a);
このように要素に undef を含む配列について join などをする場合、"Use of uninitialized value in join or string at .. " と警告が出る。これを回避するには予め grep で undef 要素を排除しておく。
  @a = grep(defined($_), @a);
undef を空文字列要素などとして残したい場合には次のようにする。
  grep { $_ = '' unless defined($_) } @a;
TCP サーバ
Perl クックブックに TCP クライアント/サーバの例がある(手元の第1版ではレシピ17.2)が、実用のためにはタイムアウトであるとか、分割 read/write 処理の必要がある。C であれば以前紹介した Programming UNIX Sockets in C - Frequently Asked Questions (リンクは日本語訳)で紹介されているコードがあったのだけれど、現在はリンク切れのため、ここ[sockutil.c]に掲載しておく。これをベースに Perl で適当に書いた TCP サーバがこちら[tcpserv.pl]。クライアントからのデータを 10 byte づつまとめて読んでいる。この辺は実際のアプリケーションレベルでのプロトコルにしたがって適当にゴニョゴニョすること。

Perl ベストプラクティス」は日本語版が出た。とかく読みにくいと嫌われがちな Perl 書法のひとつの基準である。

Posted by masato at 11:27 PM
このエントリーのトラックバックURL: http://bird.dip.jp/cgi-bin/mt/mt-tb.cgi/1250
コメントする

おそらく携帯電話等からは投稿できません。日本語文字列を含まないコメントやトラックバック、および当サイトへの言及を含まないトラックバックは御遠慮いただいております。また、90日以上経過した記事へのコメントはできません。










名前、アドレスを登録しますか?