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

ホーム

Perlニュースレター

Perl情報メモ

会社情報

トレーニングコース

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

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

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

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

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

  ◇ 初心者コーナー
       スカラーコンテキストとリストコンテキスト(2)
  ◇ Perl 5.6の新機能 (1)
  ◇ 最近のトピックス
       * Perl 5.5.670のリリース
  ◇ 最新バージョン情報
  ◇ インフォメーション
  ◇ 編集後記
======================================================================
■■ 初心者コーナー
======================================================================
        このコーナーでは、Perlを学び始めたばかりの人を対象に、基本とな
        るポイントを解説します。

        前回に引き続き、コンテキストという概念について解説します。
----------------------------------------------------------------------
◇スカラー値をリストコンテキストで評価する

スカラー値を、リストコンテキストに置くと、そのスカラー値だけを要素とす
る(1要素の)リスト値として扱われます。例えば、次のように配列変数@aに
対して、10という値を代入すると、配列@aは1個の要素10を持つようになりま
す。

        @a = 10;

◇コンテキストに応じて異なる値を返す関数/演算子

前回は、スカラーコンテキストとリストコンテキストで異なる値を返すような
ものとして、配列変数名を紹介しました。配列変数名をリストコンテキストで
評価するとその配列の全要素が得られ、スカラーコンテキストで評価するとそ
の配列の要素数が得られます。

        @a = @b;   # リストコンテキスト: @bの内容が@aにコピーされる
        $a = @b;   # スカラーコンテキスト: @bの要素数が$aにセットされる

このほかにも、コンテキストに応じて別の値を返すような組み込み関数や演算
子がたくさんあります。やっかいなことに、スカラーコンテキストで返す値と
リストコンテキストで返す値の間には、特にこれといった規則性がありません。
つまり、コンテキストに応じてどのような値を返すかは、関数/演算子によっ
てまちまちなのです。ですから、各関数/演算子について、コンテキストによっ
てどんな値が返されるかを覚える必要があります。

実際には、このような関数/演算子は、各コンテキストにおいて「もっとも使
いやすい値」を返すので、ある程度Perlに慣れてしまえばあまり気にならない
でしょう。このような関数や演算子については、ドキュメントにそれぞれのコ
ンテキストで返す値が明記されています。

◇入力演算子<>

入力演算子<>はコンテキストによって異なる値を返します。入力演算子は、ス
カラーコンテキストでは次の1行を読み込んで返しますが、リストコンテキス
トでは残りのすべてのデータを読み込んで、それをリスト値として返します。
このリスト値は、ファイルの1つ1つの行が要素になっています。例えば、

        open(FILE, "my-data") or die "$!: my-data\n";
        @a = ;
        close(FILE);

というコードによって、ファイルmy-dataの中身すべてが読み込まれ、1行が1
個の要素として配列変数@aにセットされます。

◇組み込み関数とリストコンテキスト

組み込み関数の引数のうち、特定のものはリストコンテキストで評価されます。
ドキュメント――perlfunc(1)マニュアルページ(UNIXではman perlfuncで見
ることができます)、「プログラミングPerl」の第3章など――でLISTという
名前を持っているパラメータは、リストコンテキストで評価されます。また、
このLISTというパラメータは、それ以降に置かれているすべての引数を受け取
ります。(ですから、パラメータLISTを持つ関数は、可変個の引数を受け取る
ことになります。)

例えば、push関数の呼び出し法は次のように定義されています。

        push ARRAY, LIST

push関数は、配列ARRAYの末尾に、リスト値LISTを追加します。この関数を、

        push(@a, 1, 2, 3);

のように呼び出すと、@aがパラメータARRAYに対応し、1, 2, 3という3つの値
を持つリスト値がLISTに対応します。つまり、1, 2, 3という3つの値が、配列
@aの末尾に追加されます。

また、push関数を

        push(@a, @x);

のように呼び出した場合には、配列変数名@xがパラメータLISTに当たります。
したがって、@xはリストコンテキストで評価され、配列@aの末尾に、配列@xの
全要素が追加されることになります。

このほかに、ユーザが定義したサブルーチン(単に関数と呼ぶこともあります)
に渡される引数は、(原則として)すべてリストコンテキストで評価されます。

◇強制的にスカラーコンテキストを適用する

print関数の呼び出し法は

        print LIST

のようになっているので、引数はすべてリストコンテキストで評価されます。
そのため、配列@aの要素の個数を表示しようとして、次のようにしてもうまく
いきません。

        print "Array \@a has ", @a, " elements.\n";

なぜなら、@aはリストコンテキストで評価されるので、配列@aのすべての要素
が(間にスペースを空けずに)表示されてしまうのです。

配列@aの要素の個数を得るには、@aをスカラーコンテキストで評価する必要が
あります。scalar関数を使えば、リストコンテキストの中でも強制的にスカラー
コンテキストを適用することができます。scalar関数は1個の引数を受け取り、
その引数をスカラーコンテキストで評価して得られた値を返します。ですから、
上のコードを書き換えて

        print "Array \@a has ", scalar(@a), " elements.\n";

のようにすれば、配列@aの要素の個数が表示されるようになります。

======================================================================
■■  Perl 5.6の新機能 (1)
======================================================================
        ベータバージョンも公開され、いよいよPerl 5.6のリリースも近づい
        てきました。

        このコーナーでは、Perl 5.6で新たに導入される機能を紹介します。
----------------------------------------------------------------------
バージョン5.6では、多くの機能が新たに導入されます。現行バージョン5.005
からの具体的な変更点は、最新ベータ版5.5.670の中のperldelta.podに記述さ
れています。変更点はかなり多岐にわたるもので、perldelta.podをマニュア
ルページに変換すると、48ページにもなります。

今回は、変更点のうち主なものを簡単に紹介します。次回からは、各機能につ
いて、より詳しく説明していきます。

◇特別なサブルーチンCHECK
  CHECKという名前を持つサブルーチンは、スクリプトのコンパイルが完了し
  た直後に実行されます。

◇バージョン番号の付け方の変更
  前号(第3号)で紹介したように、バージョン番号は5.6.0のような形式にな
  ります。

◇UnicodeとUTF-8のサポート
  UTF-8エンコーディングによるUnicode文字列を扱えるようになりました。私
  たち日本語ユーザにとっては、これが最も大きな変更点だと言えるでしょう。

◇複数のインタープリタを独立したスレッドで実行する(実験的機能)
  perl_clone() APIによって、インタープリタの複製を生成して別スレッドで
  実行することができます。このようにして生成されたインタープリタは、
  (明示的に共有するように宣言したものを除き)データを共有しません。そ
  のため、ロックを行なう必要が(ほとんど)なくなり、マルチスレッドプロ
  グラミングが容易になります。

◇レキシカルスコープによって警告メッセージを制御できるようになった
  use warningsプラグマによって、ブロックに対して警告メッセージの出力の
  有無を設定できるようになりました。また、カテゴリ(例えば、正規表現、
  IO、未初期化など)ごとに警告メッセージを出力するかどうかを指定できま
  す。

◇Lvalueサブルーチン(実験的機能)
  左辺値を返す関数を定義できるようになりました。このような関数は、代入
  式の左辺に置いたり、オートインクリメント演算子のオペランドとして使う
  ことができます。

◇our関数
  our関数は、グローバル変数を、レキシカル変数のように、パッケージ名の
  指定なしで使用できるようにします。

◇v1.2.3.4のような文字列のサポート
  v1.2.3.4のように、先頭にvを置き、その後ろにピリオドをはさんで数値を
  並べたものは、それらの数値を文字コードとする文字を並べた文字列と解釈
  されます。例えば、v65.66.67は"ABC"と同じ意味になります。これは、Perl
  の新しいバージョン番号(v5.6.1など)を扱うのに便利です。また、
  Unicode文字をコードによって指定するのにも使用します。

◇弱いリファレンス(実験的機能)
  弱いリファレンス(weak reference)とは、リファレンスカウンタを増加さ
  せない特殊なリファレンスです。あるオブジェクトに対する(通常の)リファ
  レンスが無くなった時点で、弱いリファレンスが残っていても、そのオブジェ
  クトは破棄されます。

◇2進定数のサポート
  2進数の定数を記述できるようになりました。2進数は、0bで始まります。
        $x = 0b11110101;        # 16進数の0xf5, 10進数の245

◇リファレンスに対する関数呼び出しで->を省略できる
  例えば、$foo[10]->('foo') は $foo[10]('foo') と書くことができます。

◇サブルーチン名に対してexists()が使えるようになった
  exists関数を使って、あるサブルーチンが定義されているかどうかをチェッ
  クできるようになりました。

◇配列の要素に対してexists()とdelete()が使えるようになった

◇64ビット整数のサポート

◇2Gバイトよりも大きなファイルのサポート

◇long double(精度の高い浮動小数点数)のサポート

◇pack/unpackの機能が強化された  
  型指定文字として、Z(ヌル文字で終了する文字列を扱う)、!(ネーティブ
  形式のshort、int、long)、/(個数の指定)が追加されました。また、テ
  ンプレートの中にコメントを入れることができます。

◇サブルーチンの属性定義
  従来は、サブルーチンの属性を定義するのにuse attrを使いました。バージョ
  ン5.6では、subによってサブルーチンを定義する際に属性を指定できるよう
  になりました。

◇正規表現の強化
  正規表現の機能が大幅に強化されました。正規表現の中にPerlのコードを埋
  め込めるようになりました。この機能を利用すれば、トークンの対(対応す
  るカッコ、対応するXMLタグなど)にマッチする正規表現を書くことができ
  ます。

◇オーバーロード機能の強化

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

前号(第3号)でPerl開発版のバージョン5.5.650がリリースされたことをお伝
えしましたが、その後2月22日にバージョン5.5.660が、3月1日にバージョン
5.5.670がリリースされました。

        【注意: 開発版(development version)は、次期バージョンに向け
        た開発作業が行なわれるバージョンです。安定した動作は期待できな
        いので、通常の運用に使うシステムには向きません。】

バージョン5.5.670は、Perlの次期バージョン5.6のリリースに向けての3番目
のベータ版です。

   ▼Perl 5.5.670の入手先
     ◇5.5.670を新規に入手する
       ftp://ftp.linux.activestate.com/pub/staff/gsar/APC/5.5.670/perl-5.5.670.tar.gz

     ◇5.5.660から5.5.670へのパッチを入手する
       ftp://ftp.linux.activestate.com/pub/staff/gsar/APC/5.5.670/perl-5.5.670.patch.gz

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

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

また、ActiveStateは、バージョン5.5.670をベースにした、ActivePerl 5.6
beta 2を公開しました。Windows NT、Solaris、Linux用のバイナリ、ソースが
公開されています。

   ▼ActivePerl 5.6 beta 2の入手先
     http://www.activestate.com/cgibin/ActivePerl/download.pl

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

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

  現在、perlは安定版(stable version)と開発版(development version)
  の2つのブランチに枝分かれして開発が行なわれています。

  安定版(stable version)は安定した動作を最大の目的としているバージョ
  ンです。原則として新たな機能の追加は行なわずに、バグの修正のみが行な
  われます。特に理由のない限り、安定版を使用するのがよいでしょう。

  開発版(development version)は、次期バージョンのベースとなるもので、
  どんどん新しい機能が追加されます。実験的(experimental)なバージョン
  とされており、動作の安定性は期待できません。

  ◇perl安定版(stable version)
        最新バージョンは5.005_03です。

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

? ◇perl開発版(development version)
?       最新バージョンは5.5.670です(2000年3月1日リリース)
?       なおこのバージョンは、Perl 5.6へ向けての3番目のベータ版です。
?
?         ▼perl 5.5.670の入手先
?           ftp://ftp.linux.activestate.com/pub/staff/gsar/APC/5.5.670/perl-5.5.670.tar.gz

●jperl●

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

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

●Windows版●

  ◇ActivePerl
        ActivePerlは、ActiveStateによるWin32(Windows 95/98/NT)用の
        perlです。フリーで入手できます。最新バージョンはBuild 522で、
        5.005_03をベースにしています。バイナリ(とソース)が配布されて
        います。

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

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

?       ActiveStateは、バージョン5.5.670をベースにした、ActivePerl 5.6
?       beta 2を公開しています。(Windows NTのみ。95/98は未サポート。
?       開発版なので、動作の安定は期待できません。)
?
?         ▼ActivePerl 5.6 betaの入手先
?           http://www.activestate.com/cgibin/ActivePerl/download.pl

  ◇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/

======================================================================
■■  インフォメーション
======================================================================
●Kansai.pm 設立記念セミナーの開催のお知らせ
 
  現在、有志により関西のPerl Mongers、Kansai.pmの設立準備をしています。
きたる 3月19日(日)にKansai.pm主催のPerlに関する無料セミナーと、
懇親会を開催する予定です。皆様お誘いあわせのうえ、是非おこしください。
  主催: Kansai Perl Mongers
  日時: 2000年03月19日(日)
  会場: 江坂東洋ビル19F セミナールーム  (東洋情報システム 本社ビル)

  申込方法: 
       Kansai.pm設立準備ML( kansai-perl-pre@nara.feedmania.org )に、
       参加して、末尾に添付するフォームで申し込むか、
       ひい爺さんの遺言で「MLには入るな」と言われたその他の理由で
       *どうしてもMLに入れない*場合は、kikawa@osa.att.ne.jp
       に同様のものを送ってください。
  申込締切: 3月17日(金)まで
 Perl Mongersについて詳しくは http://www.pm.org をご覧ください。
 Kansai.pm と準備MLについては、準備中のページですが
 http://www-karc.crl.go.jp/synsophy/fukuhara/kansai_pm/
 をごらんください。詳しいセミナー内容についても上記参照

======================================================================
■■  編集後記
----------------------------------------------------------------------
▼発行が当初の予定日(3月7日)より遅れたことをお詫びいたします。
▼次号からは、Perl5.6の個々の新機能について紹介していく予定です。
▼第5号は、3月21日発行の予定です。
                                近藤 嘉雪 (cond@context.co.jp)
======================================================================
Perlニュースレター 第4号 (2000年3月9日発行)

        主筆:-) 近藤 嘉雪
        発行元  有限会社コンテキスト(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.