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

ホーム

Perlニュースレター

Perl情報メモ

会社情報

トレーニングコース

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

Perlニュースレター 第10号 (2000年11月24日)

----------------------------------------------------------------------
        Perlニュースレター      第10号 (2000年11月24日発行)

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

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

  ◇ お詫び
  ◇ Perl/Ruby Conference開催のお知らせ
        * 11/29〜12/1、国立京都国際会館(京都市)
  ◇ 初心者コーナー
        * スライス
  ◇ 最新バージョン情報
  ◇ 編集後記

======================================================================
■■ お詫び
======================================================================
読者のみなさまへ:

Perlニュースレターをご講読いただき、まことにありがとうございます。

みなさまご存知のように、7月27日に第9号を発行してから、本号(第10号)ま
で、約4か月間にわたり、Perlニュースレターの発行を中断しておりました。
この間、読者のみなさまに、大変なご不便、ご迷惑をおかけしたことを深くお
詫び申し上げます。

これからは隔週刊のペースを守って、定期的に発行してまいります。今後とも、
Perlニュースレターをご愛読いただきますようお願い申し上げます。

                        Perlニュースレター   近藤 嘉雪

======================================================================
■■ Perl/Ruby Conference開催のお知らせ
======================================================================

株式会社オライリー・ジャパンと日本 Linux 協会(JLA)は、 2000 年 11 月 
29 日(水), 30 日(木), 12 月 1 日(金)の 3 日間に渡り, 「Perl/Ruby
Conference」を 「国立京都国際会館」(京都市)にて開催します。(なお、日
本Linux協会が主催する Linux Conference 2000 Fallとの併催となります。)

■会期:2000年11月29日(水)〜12/1日(金)
■会場:国立京都国際会館 (京都市左京区宝が池)
■主催:日本Linux協会, (株)オライリー・ジャパン

Perlの父、Larry Wall 氏が基調講演を行ないます。また、Perlニュースレター
を執筆している近藤 嘉雪もチュートリアル「Perl入門」とセッション「Perl
5.6の新機能」を担当いたします。

詳しくは以下のURLをご参照ください。

        ▼Perl/Ruby Conferenceメインページ
          http://perlruby-con.opensource.gr.jp/

        ▼基調講演
          http://lc.linux.or.jp/k-detail.html

        ▼チュートリアル
          http://perlruby-con.opensource.gr.jp/t-detail.html

        ▼カンファレンス一覧
          http://lc.linux.or.jp/pr-detail.html

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

        今回はスライスについてお話しします。
----------------------------------------------------------------------
◇スライスとは?

Perlでは、配列変数を表わすには、先頭に@を付けて@aのように書きます。こ
れに対して、配列の要素を表わす場合には、先頭には@ではなく$を使います。
例えば、配列@aの先頭の要素は、@a[0]ではなく、$a[0]と書くのでしたね。そ
の理由は、「配列の要素自体はスカラーであるから」ということになっていま
す。

慣れないうちは、ついうっかり配列の要素を@a[0]のように書いてしまうこと
があります。しかし、そのよう書き方をしても、エラーにはなりません。なぜ
かといえば、@a[0]のような書き方はPerlのコードとして正しいものだからで
す。

このような記法は、スライス(slice)と呼ばれ、配列の要素を並べたリスト
を表わすことになっています。例えば、@a[0, 1]というスライスは、($a[0],
$a[1])という2要素のリストを表わします。

次のコード

        @a = ('foo', 'bar', 'zot');
        @x = @a[0,1];

を実行すると、配列@xの値は('foo', 'bar')となります。これは、

        @a = ('foo', 'bar', 'zot');
        @x = ($a[0], $a[1]);

と書くのと同じことです。

◇スライスの添え字

スライスの添え字はリストコンテキストで評価されます。添え字には、リスト
値を返す任意の式を使うことができます。例えば、

        @a = ('foo', 'bar', 'zot');
        @subs = (2,1);
        @x = @a[@subs];

とすれば、配列@xの値は('zot', 'bar')となります。なぜなら、配列@subsに
は(2, 1)というリスト値が入っているので、3行目のスライス@a[@subs]は、
@a[2, 1]と解釈されるからです。

◇スライスを左辺値として使う

スライスを左辺値として使うこともできます。例えば、次のように、スライス
に対して値を代入することができます。

        @a = ('one', 'two', 'three', 'four');
        @a[1,2] = ('a', 'b');

この場合、配列のうち、スライスで指定した部分の要素のみが変更されます。
それ以外の要素の値は変わりません。上のコードを実行すると、@aの値は
('one', 'a', 'b', 'four')となります。

◇配列の要素を交換する

スライスを利用して、配列の2つの要素を交換することができます。

        @a[1, 3] = @a[3, 1];    # $a[1]と$a[3]を交換する

また、配列の最初と最後の要素を交換するには次のようにします。

        @a[0, $#a] = @a[$#a, 0];

ここで「$#a」というのは、配列@aの最後の要素の添え字を表わします。です
から、上のコードでは、添え字0(先頭)と添え字$#a(最後)の要素を交換す
ることになります。

◇スライスをスカラーコンテキストで評価する

最初に説明したように、

        @a[1, 2, 3]

というスライスは、

        ($a[1], $a[2], $a[3])

というリストと同じ意味を持ちます。

ですから、スライスをスカラーコンテキストで評価すると、スライスの最後の
要素の値が得られることになります(リストをスカラーコンテキストで評価す
ると最後の値が得られるため)。したがって、

        $x = @a[1, 2, 3];

を実行すると、$a[3]の値が$xに代入されることになります。

◇スライス@a[1]の落とし穴

ここであらためて、「$a[1]の代わりに、@a[1]と書くと何が起こるか?」につ
いて検討してみましょう。

まず

        $x = @a[1];

というコードについて考えてみます。ここでは、スライス@a[1]はスカラーコ
ンテキストで評価されます。その結果、変数$xには、$a[1]の値が代入される
ことになります。つまり、スカラーコンテキストで使用する場合、$a[1]と
@a[1]は同じものとなります。

次に、代入式の左辺(左辺値)について考えてみます。例えば、

        $a[1] = @x;     # (1)

とすべきところを、間違って

        @a[1] = @x;     # (2)

と書いてしまったとしましょう。式(1)の左辺$a[1]は配列の要素(つまりスカ
ラー)なので、右辺はスカラーコンテキストで評価されて、配列@xの要素の個
数が$a[1]に代入されます。

これに対して、式(2)では、左辺の@a[1]がスライスなので、右辺はリストコン
テキストで評価されます(@a[1]には要素が1個しかありませんが、あくまでも
リストとして扱われることに注意してください)。そのために、右辺の@xはリ
ストコンテキストで評価され、$a[1]には配列@xの先頭の要素が代入されてし
まいます。

また、スライスの添え字はリストコンテキストで評価されるので、コンテキス
トによって異なる値を返すような式を添え字に使っている場合には、予期せぬ
事態が発生することになります。

例えば、

        $data[@data] = "END";

というコードは、配列の末尾に"END"という要素を追加しますが、これを間違
えて

        @data[@data] = "END";

と書くと、@dataの内容が壊されてしまいます。

(続く)

======================================================================
■■  最新バージョン情報                        2000年11月23日現在
======================================================================
        このコーナーでは、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-20000401.pat.gzです。

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

●Windows版●

  ◇ActivePerl

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

?         ▼ActivePerlの入手先(Build 522も620もここから入手可能)
            http://www.activestate.com/Products/ActivePerl/Download.html

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

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

          ▼jperl522の入手先
            http://www.shonanblue.ne.jp/~kipp/perl/jperl/

●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.13です。

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

          ▼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://www.perl.com/CPAN/authors/id/D/DA/DANKOGAI/Jcode-0.60.tar.gz

●その他●

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

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

======================================================================
■■  編集後記
----------------------------------------------------------------------
▼第11号は、12月7日頃発行の予定です。
▼11号では、Perl/Rubyカンファレンスのために来日する、Perlの生みの親
  Larry Wall氏のインタビューを掲載する予定です。ぜひご期待ください。

                                近藤 嘉雪 (cond@context.co.jp)
======================================================================
Perlニュースレター 第10号 (2000年11月24日発行)

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