コンテキストのホームへ ホーム > Perlニュースレター > バックナンバー > 第5号

ホーム

Perlニュースレター

Perl情報メモ

会社情報

トレーニングコース

!!速報!!
「プログラミングPerl第3版」が発売されました。 この機会にぜひお求めください。 詳しくは こちらをクリック
 
 

Perlニュースレター 第5号 (2000年3月30日)

----------------------------------------------------------------------
        Perlニュースレター      第5号 (2000年3月30日発行)

        http://www.context.co.jp/perlnews/      発行部数 2913部
----------------------------------------------------------------------

  ▼このメールはお申し込みいただいたアドレス(cond@context.co.jp)
    に無料でお届けしているものです。
  ▼以下のページで配送中止の手続きができます。
         http://www.context.co.jp/perlnews/
======================================================================
◆◆  目  次  ◆◆

  ◇ 初心者コーナー
        * リスト (1)
  ◇ Perl 5.6の新機能 (2)
  ◇ 最近のトピックス
        * Perl 5.6.0のリリース
  ◇ 最新バージョン情報
  ◇ 編集後記
======================================================================
■■   お知らせ   ■■
======================================================================
Perlニュースレターの発行者(近藤)が監訳した本が出版されました。

        「Perlクイック リファレンス」
          Ellen Siever、Stephen Spainhour、Nathan Patwardhan 著
          近藤 嘉雪、台場 圭一 監訳
          山本浩、イエローレーベル 訳
          オライリー・ジャパン
          784ページ
          本体価格4,500円
          ISBN: 4-900900-72-9

本書は、Perl in a Nutshellの日本語訳です。Perl言語そのものに加え、良く
使われるモジュールのほとんどを網羅したリファレンスになっています。詳し
くはオライリー・ジャパンのホームページをご覧ください。

   ▼オライリー・ジャパン
     http://www.oreilly.co.jp/

======================================================================
■■ 初心者コーナー
======================================================================
        このコーナーでは、Perlを学び始めたばかりの人を対象に、基本とな
        るポイントを解説します。

        今回から2回にわたってリストについてお話しします。
----------------------------------------------------------------------
◇リストとは?

スクリプトの中にリスト値を直接に記述するには、リストという構文を使いま
す。リストの書き方はとても簡単です。値をカンマで区切って並べて、その全
体をカッコで囲んでやります。例えば、

        (10, 20, 30, 40)

というリストは、4つの値10、20、30、40から成るリスト値を表わします。

リストは、リスト値が期待されるような場所(いわゆるリストコンテキスト)
ならどこにでも使うことができます。最も一般的なのは、次のように配列変数
に対して値を設定するという使い方でしょう。

        @a = (10, 20, 30, 40);

このコードによって、配列変数@aは、10, 20, 30, 40という4つの要素を持つ
ようになります。配列@aの各要素の値は、$a[0]が10、$a[1]が20、$a[2]が30、
$a[3]が40となります。代入する時点で@aに入っていた値は捨てられます。

◇空リスト

要素を1つも持たないリストは空リストと呼ばれます。空リストは、()と書き
ます。(実際には、開きカッコと閉じカッコの間にスペース、タブ、改行文字、
コメントを挟んでもかまいません。)

配列に対して空リストを代入することによって、要素を1つも持たない空の状
態にすることができます。

        @a = ();        # @aは要素を1つも持たない状態になる

◇リストに対する添え字付け

配列と同じように、リストに対して添え字を指定して要素を取り出すことがで
きます。例えば、次のコードを見てください。

        $x = 2;
        $a = ("zero", "one", "two", "three")[$x];

1行目では$xに2を代入しています。2行目の代入演算子の右辺では、("zero",
"one", "two", "three")というリストに対して、[$x]によって添え字を指定し
ています。変数$xには2が入っているので、リストのうち、添え字2に対応する
値、つまり"two"が得られます。(配列の場合と同じように、リストの先頭の
要素が添え字0に対応します。)その結果、変数$aには"two"が代入されます。

◇リストと配列の違い

このようにリストと配列はよく似ていますが、大きな違いがあります。それは、
配列は変数としての実体があるのに対して、リストは値に過ぎないという点で
す。

配列の場合には、全体に値を代入したり、個々の要素に値を代入することがで
きます。また、push、pop、shift、unshift、spliceなどの関数を使って、内
容を変更することができます。これに対して、リストはあくまでも値であり、
実体がないのでその内容を変更することはできません。

これは、スカラー変数とスカラー値の関係に置き換えればわかると思います。
スカラー変数の値を変えることはできます。それに対して、スカラー値である
数値や文字列そのものの値を変えることはできません。スカラー値をリストに、
スカラー変数を配列に置き換えて考えれば、理解できるでしょう。

◇リストとスカラーコンテキスト

リスト値が期待されていない場所、つまりスカラーコンテキストにリストを置
くと何が起こるでしょうか? 例えば、次のように、リストをスカラー変数$aに
代入すると、$aの値は何になるでしょう?

        $a = (10, 20, 30);

実は、リストをスカラーコンテキストに置くと、それはリストとしては認識さ
れません。値をカンマ演算子で結びつけて、(数式をまとめる働きをする)カッ
コで囲んだものとして解釈されるのです。

カンマ演算子は、左オペランドを評価してその値を捨てます。次に、右オペラ
ンドを評価してその値を結果として返します。わかりやすく言えば、右オペラ
ンドの値がカンマ演算子の値になるのです。また、カンマ演算子は左から右へ
と評価される(左結合)ので、上の例の右辺のようにカンマ演算子が連続して
いる場合には、最後の値30が全体の値となります。ですから、変数$aには30が
代入されます。

これに対して、配列をスカラーコンテキストで評価すると、要素の個数が得ら
れます。この違いに気をつけてください。例えば、次のコードを実行すると、
$xには4が、$yには40が得られます。

        @a = (10, 20, 30, 40);
        $x = @a;
        $y = (10, 20, 30, 40);

======================================================================
■■  Perl 5.6の新機能 (2)
======================================================================
        3月23日にPerl 5.6.0がリリースされました。前バージョン5.005のリ
        リースから1年8か月ぶりの新バージョンとなります。

        このコーナーでは、Perl 5.6で新たに導入される機能を紹介します。
----------------------------------------------------------------------
◇良いニュース ― Unicodeのサポート

Perl 5.6の目玉はUnicodeのサポートです。バージョン5.005までのPerlでは、
「1文字が1バイトである」という前提で文字列を扱っていました。そのために、
2バイト長の文字コードを使用する日本語を扱うには、改造を加えた日本語用
のバージョンjperlを使わなければなりませんでした[注1]。

   注1 実際には、文字コードとしてEUCコードを使う場合には、英語版のperl
       でも文字列などに日本語を使うことができます。しかし、英語版の
       perlはあくまでも1バイトを1文字として扱うので、正規表現マッチを
       行なったり、文字列を(バイト単位ではなく)文字単位で操作するに
       は、ちょっとしたテクニックが必要になります。

Perl 5.6では、Unicodeの文字列をサポートするようになりました。Unicode文
字はUTF-8というエンコーディングで表現されます。日本語の文字はUTF-8によっ
て表現されることになります。

Perlは、すべての文字列に対して、それがUTF-8文字列であるか、あるいは
(従来の)バイト文字列であるかを識別する印を付けておきます。そして、文
字列を扱う際には、UTF-8ならば(バイト単位ではなく)文字単位で処理を行
ないます。例えば、length関数は、文字列がUTF-8ならば、バイト数の代わり
に、文字数を返してくれます。

◇そして悪いニュース

ここまでは良いニュースだったのですが、悪いニュースもお伝えしなければな
りません。

実は、バージョン5.6.0では、Unicodeのサポートはまだ不完全で、実験的な機
能(experimental feature)にとどまっています。

また、Perl 5.6では、日本語はUnicode(UTF-8)で表現されます。そのために、
従来の文字コード(Shift JISやEUC)で表現されたファイルを扱うためには、
ファイルを読み書きする際にトランスペアレントにコードを変換する必要があ
りますが、そのためのメカニズムはまだ実装されていません。(これは、近い
将来に実装される予定です。)

そんなわけで、現行のバージョン5.6.0では、まだjperlのように日本語処理を
行なうことはできません。せっかくの新バージョンですが、本格的な日本語処
理ができるようになるまでには、もう少し待たなければなりません。

ところで、従来のバージョンとの互換性を保つために、Perl 5.6では、通常の
データはUTF-8ではなく、バイト列として扱います。ですから、先ほど[注1]で
紹介した、文字コードをEUCにして英語版のperlを利用するという方法ならば、
バージョン5.6.0でも従来のスクリプトがそのまま使えるはずです。

======================================================================
■■  最近のトピックス
======================================================================
●Perl 5.6.0のリリース●

3月24日付の号外でお知らせしたように、3月23日に新バージョン5.6.0がリリー
スされました。1998年7月にバージョン5.005がリリースされてから、1年8か月
ぶりのバージョンアップになります。

   ※Perl 5.6の入手先が、号外(3月24日付)に掲載したURLから変わってい
     るのでご注意ください。

   ▼Perl 5.6の入手先
     http://www.perl.com/CPAN/src/perl-5.6.0.tar.gz

   ▼Perl 5.6.0のリリースについて
     (www.perl.com掲載の記事、英語)
     http://www.perl.com/pub/n/Perl_5.6.0_is_out!

   ▼Perl 5.6.0リリースのアナウンス記事 (perl5 porters MLより、英語)
     http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2000-03/msg02596.html

また、ActiveStateは、バージョン5.6をベースにしたActivePerl 5.6 (Build
613)をリリースしました。Windows 95/98/NT/2000、Solaris、Linux用のバイ
ナリ、ソースが公開されています。

   ▼ActivePerl 5.6に関する説明
     http://www.activestate.com/ActivePerl/default.htm

   ▼ActivePerl 5.6の入手先
     http://www.activestate.com/ActivePerl/download.htm

======================================================================
■■  最新バージョン情報                        2000年3月28日現在
======================================================================
        このコーナーでは、Perl処理系とユーティリティの最新バージョンと
        その入手先を紹介します。

        行頭に?が付いてる部分は、今回更新された情報です。
        行頭に+が付いている部分は新規に追加された情報です。
----------------------------------------------------------------------
●perl●

  2000年3月23日にPerl 5.6がリリースされました。しばらくの間は、 Perl
  5.005とPerl 5.6の情報を提供していきます。

  ◇perl5.005
        最新バージョンは5.005_03です。

?         ▼perl 5.005_03の入手先
?           http://www.perl.com/CPAN/src/perl5.005_03.tar.gz

+ ◇perl 5.6
+       最新バージョンは5.6.0です(3月23日リリース)
+
+         ▼perl 5.6.0の入手先
+           http://www.perl.com/CPAN/src/perl-5.6.0.tar.gz


●jperl●

  jperlは、perlを日本語対応にするためのパッチです。最新バージョンは
  jperl5.005_03-20000212.pat.gzです。

    ▼jperl5.005_03-20000212.pat.gzの入手先
      http://www.perl.com/CPAN/authors/Hirofumi_Watanabe/jperl5.005_03-20000212.pat.gz

●Windows版●

  ◇ActivePerl

?       ActivePerlは、ActiveStateによるWin32(Windows 95/98/NT/2000)
?       用のperlです。フリーで入手できます。最新バージョンはBuild 613
?       で、5.6.0をベースにしています。バイナリ(とソース)が配布され
?       ています。また、Perl 5.005_03ベースのBuild 522も公開されていま
?       す。
?
?         ▼ActivePerlの入手先(Build 522も613もここから入手可能)
?           http://www.activestate.com/ActivePerl/download.htm

          ▼ActiveState
            http://www.activestate.com/

  ◇JPerl for MS-Windows
        ActivePerlにjperlパッチを組み込んで日本語対応にしたものです。
        最新バージョンはjperl522で、ActivePerl Build 522と
        jperl5.005_03-990822.pat.gzをベースにしています。バイナリ(と
        ソース)が配布されています。

          ▼jperl522の入手先
            http://www.shonan.ne.jp/~kipp/perl/jperl_win32.html

●Macintosh版●

  ◇MacPerl
        Macintosh用のperlです。最新バージョンはMacPerl 5.20r4で、
        5.004_04をベースにしています。バイナリ(とソース)が配布されて
        います。

          ▼MacPerl 5.20r4の入手先
            http://www.perl.com/CPAN/ports/mac/Mac_Perl_520r4_appl.bin

          ▼MacPerlに関する情報
            http://www.perl.com/CPAN/ports/index.html#mac

  ◇MacJPerl(日本語版)
        Macintosh用の日本語対応のperlです。最新バージョンはMacJPerl
        5.2.0r4 J1です。MacPerl 5.20r4(5.004_04ベース)と
        jper5.004_04-980303.patをベースにしています。バイナリが配布さ
        れています。

          ▼MacJPerl 5.2.0r4 J1の入手先
            http://world.std.com/~habilis/macjperl/MacJP5.j.htm

●日本語のコード変換ユーティリティ●

  ◇jcode.pl
        日本語のコード変換を行うためのライブラリです(Perl 4でもPerl 5でも
        使えます)。最新バージョンは2.11です。

          ▼jcode.pl 2.11の入手先
            ftp://ftp.iij.ad.jp/pub/IIJ/dist/utashiro/perl/jcode.pl-2.11

          ▼jcode.plの変更履歴
            ftp://ftp.iij.ad.jp/pub/IIJ/dist/utashiro/perl/jcode.pl-history

          ▼jcode.pl の私的な解説書
            http://ina.kappe.co.jp/~sabre/kcode/jcode.html

  ◇Jcode.pm
        日本語のコード変換を行うためのモジュールです(Perl 5専用。Perl
        4では使えません)。最新バージョンは0.60です。

          ▼Jcode.pmの入手先
            http://openlab.ring.gr.jp/Jcode/index-j.html

●その他●

  Perlニュースレターの発行者(近藤 嘉雪)による、Perlに関する情報をま
  とめたページです。「Perlプログラミング」「初めてのPerl」に関する情報
  もあります。ぜひお立ち寄りください。

    ▼Perl情報メモ
      http://www.context.co.jp/~cond/perlinfo/

======================================================================
■■  編集後記
----------------------------------------------------------------------
▼ついにPerl 5.6がリリースされました。記事にも書きましたが、残念ながら、
  現段階では日本語を扱うことはできません。Perlニュースレターでは、
  Unicodeサポートの進展について、今後ともフォローしていきます。
▼第6号は、4月11日頃発行の予定です。
                                近藤 嘉雪 (cond@context.co.jp)
======================================================================
Perlニュースレター 第5号 (2000年3月30日発行)

        主筆:-) 近藤 嘉雪
        発行元  有限会社コンテキスト(http://www.context.co.jp/)

▼バックナンバーは:     http://www.context.co.jp/perlnews/bn/
▼配信申込/配信中止は:  http://www.context.co.jp/perlnews/
▼ご意見・ご感想・お問い合わせは:
                        mailto:perlnews@context.co.jp
======================================================================
Copyright 2000  (有)コンテキスト, All rights reserved.
「Perlニュースレター」に掲載された記事を許可なく転載することを禁じます。
======================================================================
ご質問・お問い合わせはperlnews@context.co.jpまで
Copyright (C) 2001 Context, Inc. All rights reserved.