| ホーム > Perlニュースレター > バックナンバー > 第6号 | ||||||
|
|
Perlニュースレター 第6号 (2000年4月18日)
----------------------------------------------------------------------
Perlニュースレター 第6号 (2000年4月18日発行)
http://www.context.co.jp/perlnews/ 発行部数 3077部
----------------------------------------------------------------------
▼このメールはお申し込みいただいたアドレス(cond@context.co.jp)
に無料でお届けしているものです。
▼以下のページで配送中止の手続きができます。
http://www.context.co.jp/perlnews/
======================================================================
◆◆ 目 次 ◆◆
◇ 初心者コーナー
* リスト (2)
◇ Perl 5.6の新機能 (3)
◇ リソース紹介
* メールマガジン「Perlクイズ」
◇ 最新バージョン情報
◇ 編集後記
======================================================================
■■ 初心者コーナー
======================================================================
このコーナーでは、Perlを学び始めたばかりの人を対象に、基本とな
るポイントを解説します。
今回は、前回に引き続きリストについてお話しします。
----------------------------------------------------------------------
◇リストの要素には任意の式を使うことができる
これまでに紹介したリストでは、要素は文字列か数値になっていました。しか
し実際には、リストの要素はどんな式でも構いません。リスト内に置かれた式
は、リストコンテキストで評価されます。例えば、リストの中に配列を置くと、
その配列のすべての要素がそこにコピーされます。ですから、
@a = (1, 2, 3);
@b = ('x', 'y');
@x = (@a, @b);
というコードを実行すると、@xは、1, 2, 3, 'x', 'y'という5つの要素を持つ
ようになります。
◇リストに対する代入
リストに対して、値を代入することができます。ただし、この場合、リストの
要素は左辺値かundefでなければなりません。左辺値(l-value)とは、「(そ
れに対して)値を代入することができるもの」のことです。左辺値という名前
は、代入式の左辺に置けるということからきています。
具体的には、スカラー変数$s、配列変数@a、ハッシュ変数%h、配列要素$a[10]、
ハッシュ要素$h{'key'}などが左辺値になります。また、スライス@a[1, 2, 3]
も左辺値になります。(スライスとは、配列やハッシュ内の複数の要素を指定
したものです。スライスについては、別の機会に解説します。) このほかに、
substr関数やvec関数も左辺値として使うことができます。
リストに対する代入の例を見てみましょう。次のコードを実行すると、$aには
1、$bには2、$cには3が代入されます。
($a, $b, $c) = (1, 2, 3);
また、リストへの代入は、関数が返したリスト値を複数のスカラー変数で受け
取る場合に便利です。例えば、times関数は、プロセスが消費したCPU時間を4
要素のリストとして返します(引数は受け取りません)。times関数は次のよ
うにして使われます。
($user, $system, $cuser, $csystem) = times;
times関数がリスト値として返す4個の値の意味は次のとおりです(値はいずれ
も秒単位)。
------------------------------------------------------
値 意味
------------------------------------------------------
$user 実行中のプロセスが消費したユーザCPU時間
$system 実行中のプロセスが消費したシステムCPU時間
$cuser 子プロセスが消費したユーザCPU時間
$csystem 子プロセスが消費したシステムCPU時間
------------------------------------------------------
◇リストの要素数と代入される値の個数が一致しない場合
リストの要素の個数よりも、代入される値のほうが多い場合には、余った値は
捨てられます。例えば、
($a, $b, $c) = (1, 2, 3, 4, 5);
というコードを実行すると、右辺のリストの最初の3つの要素1、2、3がそれぞ
れ$a、$b、$cに代入され、残りの要素4, 5は捨てられます。
これとは逆に、リストの要素の個数よりも代入される値のほうが少ない場合、
対応する値がない変数には未定義値(undef)がセットされます。例えば、
($a, $b, $c) = (1, 2);
を実行すると、$aには1、$bには2、$cにはundef(未定義値)が代入されます。
◇代入されるリスト中に配列やハッシュがある場合
代入の対象となるリスト中の配列変数(またはハッシュ変数)は、それ以降の
すべての値を取り込んでしまいます。その結果、その配列(またはハッシュ)
より後ろのすべての変数には未定義値undefがセットされます。例えば、
($a, @b, $c, $d) = (1, 2, 3, 4);
というコードを実行すると、$aには1がセットされて、@bには2, 3, 4という3
個の要素がセットされます。そして$c、$dには、未定義値undefがセットされ
ます。
◇代入されるリスト中にundefがある場合
代入の対象となるリストの要素にundefを使うことができます。この場合、
undefに対応する値は、代入されずに捨てられます。例えば、
($a, undef, $b, undef, $c) = (1, 2, 3, 4, 5);
を実行すると、$aには1、$bには3、$cには5が代入されます。右辺のリストの2
番目の要素2と4番目の要素4は、代入されずに捨てられます。
======================================================================
■■ Perl 5.6の新機能 (3)
======================================================================
3月23日にPerl 5.6.0がリリースされました。前バージョン5.005のリ
リースから1年8か月ぶりの新バージョンとなります。
このコーナーでは、Perl 5.6で新たに導入された機能を紹介します。
----------------------------------------------------------------------
◇文字コードによるUnicode文字の指定: \x{nnnn}
UTF-8をサポートしているエディタを利用すれば、文字列中にじかにUnicode文
字を入れることができます。エディタがUTF-8を扱えない場合には、文字コー
ドを指定して、文字列中にUnicode文字を埋め込むことができます。それには、
\x{nnnn}というエスケープシーケンスを使います。ここで、nnnnという部分は、
16進数で表現したUnicodeの文字コードです。また、以前からある文字コード
指定(例えば\x41: 大文字のA)と区別するために、Unicode文字を指定する場
合には文字コードをブレースで囲みます。
文字コードによってUnicode文字を指定する例を次に示します。
"\x{3042}\x{3043}\x{3044}"
ここで、0x3042は「あ」、0x3043は「い」、0x3044は「う」の文字コードです。
したがって、これは「あいう」というひらがな3文字から成る文字列になりま
す。
◇v1.2.3.4という形で文字列を記述する
文字vの後ろに、ピリオドをはさんで10進数を並べたリテラル(例えば、
v1.2.3.4)は、それらの10進数を文字コードとする文字から成る文字列と解釈
されます。文字コードはUnicodeとして解釈されます。
先ほどの「あいう」という3文字の文字列は、この記法で書くと次のようにな
ります。
v12354.12355.12356
ここにでてくる3個の数値12354、12355、12356は、それぞれ「あ」「い」「う」
の文字コード0x3042、0x3043、0x3044を10進数で表したものです。
文字コードが3個以上の場合には、先頭のvは省略しても構いません。つまり、
上の例は次のように書くことができます。
12354.12355.12356
◇特殊変数$^Vを利用したバージョン番号のチェック
バージョン5.005までは、特殊変数$]によって、Perlのバージョン番号を数値
として得ることができました。バージョン5.6でも$]はサポートされていて、
コマンドラインから
$ perl -le 'print $]'
と実行すると、「5.006」と表示されます。
バージョン5.6.0からは、特殊変数$^Vによって、バージョン番号を文字列とし
て得ることができるようになりました。特殊変数$^Vとv5.6.0という形のリテ
ラルを(文字列として)比較することによって、perlインタープリタのバージョ
ンをチェックすることができます。
# このコードは5.005以前でも動作する
if ($^V) {
# $^Vが定義されている: 5.6.0以降である
if ($^V lt v5.7.0) {
# 5.6.xである
print "5.6.x\n";
} else {
# 5.7.0以降のバージョンである
print "5.7.0 or later\n";
}
} else {
# $^Vが定義されていない: 5.005以前である
print "5.005 or earlier\n";
}
◇printf、sprintfでv1.2.3.4を表示する
v1.2.3.4という形式の値を表示するために、printfとsprintfは%vというフォー
マット指定をサポートしています。例えば、実行しているperlのバージョンを
表示するには、次のようにします。
printf "Version is %vd\n", $^V;
これによって、次のような出力が得られます。
Version is 5.6.0
ここで使っているフォーマット指定%vdは、個々の数値を10進数で表示するこ
とを表します。代わりに、%vxを使えば数値が16進数で表示されます。例えば、
$a = 100.200.300;
printf "%vd\n", $a;
printf "%vx\n", $a;
を実行すると、次のような出力が得られます。
100.200.300
64.c8.12c
◇warningsプラグマによるチェック
バージョン5.005以前では、-wオプションを指定することによって、さまざま
なチェックが行われ、問題があれば警告メッセージが表示されました。バージョ
ン5.6では、-wオプションの代わりに、warningsプラグマを使うことになりま
す(互換性のために、-wオプションも引き続きサポートされます)。
warningsプラグマは、それが置かれているブロックの内側に対してのみ有効で
す。次のコードを見てください。
$a = "1:" + 1; # ……(1)
{
use warnings;
$a = "1:" + 1; # ……(2)
}
$a = "1:" + 1; # ……(3)
このコードでは、「"1:" + 1」という加算を3か所で行なっていますが、その
際に左オペランドの文字列"1:"が数値1に変換されます。ところで、"1:"とい
う文字列は末尾にコロンが付いているので、厳密には正しい数値の形になっ
ていません。しかし、通常はPerlは何もメッセージを出力せずに、数値に変換
してくれます。warningsプラグマを有効にすると、次のような警告メッセージ
を表示するようになります。
Argument "1:" isn't numeric in addition (+) at - line 4.
これは、「加算+のオペランド"1:"が正しい数値の形になっていない」という
メッセージです。上のコードを実行すると、(2)の式だけに対して、この警告
メッセージが出力されます。なぜなら、warningsプラグマはブレースの内側で
だけ効力を持つので、(1)と(3)はチェックの対象外だからです。
また、ブロックの外側レベルに置いたwarningsプラグマは、そのファイルの末
尾までが有効範囲となります。モジュールを定義する際に、ファイルの先頭で
「use warnings;」と指定しておけば、そのモジュールの中だけに対してチェッ
クが行なわれます。
また、useの代わりに、noを使って、
no warnings;
とすれば、そのブロックの末尾まで、warningsプラグマを無効にすることがで
きます。
warningsプラグマに対して、どんなチェックを行なうかを、パラメータで指定
することができます。何も指定しなければ、すべてのチェックが有効になりま
す。(また、allと指定してもすべてのチェックが有効になります。)
例えば、
use warnings 'io';
とすれば、I/O操作関係のチェックが行なわれるようになります。指定可能な
パラメータの一覧はperllexwarn(1)マニュアルページに記載されています。
======================================================================
■■ リソース紹介
======================================================================
このコーナーでは、Perlに関する役に立つリソースを紹介します。
----------------------------------------------------------------------
◇メールマガジン「Perlクイズ」
「Perlクイズ」は、 Perl言語を「クイズ」を通して学ぶためのメールマガジ
ンです。 結城浩さんが発行しています。
このメールマガジンを講読すると、 Perl言語に関する「クイズ」がメー
ルで届けられます。問題文を読んでみて、気が向いたら解答してみましょ
う。解答は届けられたメールに返信するだけで結構。コマ切れの時間を使っ
て、Perl言語に親しんでみませんか。料金は無料です。
▼Perlクイズ
http://www.hyuki.com/pq/
======================================================================
■■ 最新バージョン情報 2000年4月17日現在
======================================================================
このコーナーでは、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/
======================================================================
■■ 編集後記
----------------------------------------------------------------------
▼発行が予定より1週間遅れてしまい申しわけございません。今後は、スケジュー
ル通りに発行するようにいたします。
▼第7号は、5月2日頃発行の予定です。
近藤 嘉雪 (cond@context.co.jp)
======================================================================
Perlニュースレター 第6号 (2000年4月18日発行)
主筆:-) 近藤 嘉雪
発行元 有限会社コンテキスト(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ニュースレター」に掲載された記事を許可なく転載することを禁じます。
======================================================================
|
|||||