〜「すぐわかる Perl」第3刷正誤表〜

本正誤表は、第3刷から7月8日現在(第5刷)までで発見されたバグを修正するものです。

メモ:
2000年12月6日に新しく追加された修正には「▲」をつけてあります。

メモ:
2001年11月11日に新しく追加された修正には「▼」をつけてあります。

メモ:
2009年1月5日に新しく追加された修正には「■」をつけてあります。

(以下は全正誤表に共通の文章です)

エーごらんいただければわかりますが、間違い、多いです。まあ書を読みて悉くそれを信ずれば書なきが如しと申しますが(これこれ)
それにしても読者の方にあらためてお詫び申し上げます。大変ご面倒をお掛けしますが、訂正をお願いいたします。
正誤表の文責は著者の深沢千尋にあります。えっと、必ずしも正誤表通りに修正されたわけではありませんが
(長い追加はレイアウト上の理由で短縮したなど)以下では著者の意図通りにしています。
なお、必ずしも間違いではありませんが、読みやすくするために修正したものもあります。
また、脱稿後に変化があった技術情報も追加しています。

間違いのほとんどは、文字通りご精読、ご愛読くださった読者のみなさんによって発見されたものです。
いずれの方も、丁寧に読んでくださった上に、やさしい言葉でご指摘くださり、激励の言葉までいただき、
電子メール画面が涙でにじむこともしばしばありました。何人かの方とは電子メールのやりとりが始まって、
奥付に電子メール アドレスを載せておいてよかったです。本当にみなさんありがとうございました。
今後もよろしくお願いいたします(っておい)。

ご質問、ご意見は Chihiro.Fukazawa@bowneglobal.co.jp までどうぞ。

凡例 ●ページ数、出現個所
     ★編集者様へのコメント

●p18
★「実行権限が足りないので実行を拒否します、という意味です。」の後に次のメモを書きます。

メモ
Perlのスクリプトは実行権限だけでなく、読み込み権限(読まれる権限)も必要です。スクリプトを処理する
プログラムが読み込んで実行するからです。UNIXでファイルを作った時、通常の設定では全員に読み込み権限が
ありますから特に設定は必要ありませんが、chmod a+xしてもPermission denied. と怒られたらさらに 
chmod a+r(読み込み権の追加)を行なってください。パーミッションはファイルの作成者(あなた)、
あなたと同じグループの他の人、あなたと違うグループの人の3種類について別々に設定されるので
注意してください。

●p24
×3. emacs、vi など、、
○3. Emacs、vi など、、

●p42 ▼2001/11/11 新着バグ
×みんな大目に払って
○みんな多めに払って

●p48 ■2008/1/5 新着バグ
× 3.141592650 および 3.1415926050(2回)
○ 3.14159265

●p50 ▼2001/11/11 新着バグ
×攻撃する日時はどこですか
○攻撃する日時はいつですか

●p61
★掛け網部分
×
  条件文2が偽のときに実行される命令1;
  条件文2が偽のときに実行される命令2;
○
  条件文2が真のときに実行される命令1;
  条件文2が真のときに実行される命令2;


●p70 ▲2001/3/26 新着バグ
★掛け網部分の2個目
×
aaa
aaaa
aaab
aaaaa
aaaab
○
aaa
aaaa
aaaaa
aaaab
aaab

●p74
×or のことは論理積というんでしたね。and は掛け算として機能します。ゼロ以外の,,,
○and のことは論理積というんでしたね。and は掛け算として機能します。ゼロ以外の,,,

●p74
■複合条件の真偽
×真をゼロ、偽をゼロ以外、
○真をゼロ以外、偽をゼロ、

●p75
ここで、A が真、B が偽、C が真とすると、
×・まず掛け算だから and を先に考えて、「ゼロ」×「ゼロ以外」なので
○・まず掛け算だから and を先に考えて、「ゼロ以外」×「ゼロ」なので
...
A が偽、B が真、C が偽とすると、
×・まず and を先に考えて「ゼロ以外」×「ゼロ」なので
○・まず and を先に考えて「ゼロ」×「ゼロ以外」なので
...
A が偽、B が真、C が偽とすると
×・まずorを先に考えて「ゼロ以外」+「ゼロ以外」なので
○・まずorを先に考えて「ゼロ以外」+「ゼロ」なので

×・そのゼロ以外と条件Aの論理積は「ゼロ以外」×「ゼロ」なのでゼロ(偽)
○・そのゼロ以外と条件Aの論理積は「ゼロ」×「ゼロ以外」なのでゼロ(偽)

メモ
×このように「真」をゼロ、「偽」をゼロ以外、
○このように「真」をゼロ以外、「偽」をゼロ、

●p76〜89
★プログラム名 power および変数 $power を、それぞれ factorial および $factorial としてください。
 階乗という意味で power という言葉を使っていますが、これは正しくは factorial です。
 power はべき乗という意味です。

●p103
×@tall の中身は (145,155.2,undef,undef,200)に、、
○@tall の中身は (145,155.2,undef,undef,undef,200)に、、

●p104
×
$a = $tmp;
$b = $a;
$a = $tmp

○
$tmp = $a;
$a = $b;
$b = $tmp

●p107 ▼2001/11/11 新着バグ
×10 個の数字が入ります。
○11 個の数字が入ります。

●p118 ■2008/1/5 新着バグ
★掛け網部分
×% test love kiss および % test love kiss hug
○% argtest love kiss および % test love kiss hug

●p120〜122 ▼2001/11/11 新着バグ
×helon
○heron

●p136 ▼2001/11/11 新着バグ
×出力を終えるには EOF
○入力を終えるには EOF

●p150 ▼2001/11/11 新着バグ
×びっしり埋まった数
○びっしり埋まった文字列

●p152
×要は、スペース以外で終止すればいいのです。
○要は、スペース以外で終始すればいいのです。

●p177 ▼2001/11/11 新着バグ
×translitarate
○transliterate

●p182 ▼2001/11/11 新着バグ
×2番目の非数字に囲まれた2桁以下の数字を月名と判断する
○2番目の非数字に囲まれた2桁以下の数字を日付と判断する

●p189
×
  sub yymmdd {
      ...
  }
○
  sub yymmdd {
      ...(p184-185 で作ったサブルーチン yymmdd の内容が入ります)...
  }

●p194 ▼2001/11/11 新着バグ
×% rep フィルター名 変換前のファイルの拡張子 変換前のファイルの拡張子
○% rep フィルター名 変換前のファイルの拡張子 変換後のファイルの拡張子

●p197(メモの表組み) ▼2001/11/11 新着バグ
× . 1文字の文字列
○ ? 任意の1文字

●p206 プログラム リスト
×($argn == 2) or bye...
○($argn == 2) or &bye...

★bye の前に & を付けてください。(なくても動きますが、本書の方針としてつけます)

●p206
×
        print OUT;
    }
    close IN;
    close OUT;
}

sub bye {

○
        print OUT;
    }
}
close IN;
close OUT;

sub bye {

●p209
×上のプログラムを見て、あれ変だな、
○206 ページのプログラムを見て、あれ変だな、

●p210
×From: Hiroko Shimabukuro <hiroko@speed.org>
○From: Hiroko Shimabukuro <Hiroko.Shimabukuro@speed.org>

●p215 末尾
×
  sub dirproc {
      my(@files, files);
      ...
○
  sub dirproc {
      my($dep) = @_;
      my(@files, $file);
      ...

●p240 ▲2001/05/06 新着バグ
★「■dbmデータベースとハッシュを結び付ける」の前に、次のメモを挿入してください。

メモ
ここでは dbmopen('kudamono_db') の実行によって
kudamono_db.pag、kudamono_db.dir という2個の物理ファイルができて、
これをアクセスしますが、Perl のインストール環境によっては、
kudamono_db.db という拡張子が「db」のファイルがただひとつできる場合もあります。

●p245
×値はvalue関数で一覧が
○値はvalues関数で一覧が

●p245
×valueで値のリストを作って、
○valuesで値のリストを作って、

●p247
×valueで得られたリストをソートしたら
○valuesで得られたリストをソートしたら

●p251〜253 ▼2001/11/11 新着バグ
×do you want to sell it with the price
○do you want to sell it at the price

●p255
×値のリストを返すvalue
○値のリストを返すvalues

●p264 ▲2000/12/6 新着バグ
★末尾から2行目「CGI プログラムは普通 nobody という誰でもないユーザーが実行するようになっています。」の後に次のメモを
入れてください。

メモ
Perlスクリプトの場合は、実行権でなく読み込み権も全員に必要ですので注意してください(755、rwxr-xr-x の状態)。これは、
Perlがスクリプトを読み込んで実行するからです。
なお、Web サーバーの設定によっては、user のみに読み込み/実行権がある状態(700、rwx------)、user と other のみに
読み込み/実行権がある状態(705、rwx---r-x)でも動作する場合があります。サーバーの設定を調べて、可能な限り少ない権限を
与えるようにしてください。パーミッションについてくわしくは、CGI の専門書を参照してください。

●p268
★下の行
    $value =~ s/%([0-9a-fA-F][0-9a-fA-F]/pack("C", hex($1))/eg;
★の下に、下の2行を挿入する。
    $value =~ s/\r\n/\n/g;
    $value =~ s/\r/\n/g;

●p270
★p268 と同

●p272 ▲2000/12/6 新着バグ
★下の行
以上で、掲示板プログラムを終わります。

★の前に、以下の段落とメモを挿入します。
なお、以前 CGI プログラムはユーザー nobody によって実行されるので、全員に実行のパーミッションを
与えてくださいと書きましたが、同様に、ユーザーが書き込みを行なうファイル/ディレクトリには、
全員に書き込みのパーミッションを与えてください。ということで、この例題プログラムを運用する場合は、
chatform.html を chmod a+w する必要があります。

メモ
Web サーバーの設定によっては、全員に書き込み権を与えないで、user のみに書き込み権がある場合や、user と other のみに
書き込み権がある場合でも、CGI によって書き込みが可能な場合があります。サーバーの設定を調べて、可能な限り少ない権限を
与えるようにしてください。パーミッションについてくわしくは、CGI の専門書を参照してください。

●p286 ▲2000/12/6 新着バグ
★「jcode.plを置いた正しいフルパスを指定してください。」のあとに次のメモを入れてください。

メモ
くわしく述べませんが、require は Perl の使用者によって共有されるライブラリが入っているパスを検索してくれます。単に
  require 'jcode.pl';
と書いても、共有ライブラリのディレクトリに jcode.pl が入っていれば、読み込まれる可能性があります。共有ライブラリの
ディレクトリの一覧は、@INC という特別な配列変数に入っています。
なお、require されるファイル(この場合は jcode.pl)は、Perl プログラムを実行する人に対して<太字>読み込みの
パーミッションが必要です。これは require 命令によって読み込まれるからです。

●p286 ▲2000/12/6 新着バグ

★次の段落をまるごと入れ替えてください。

×まず注意して欲しいのは、jcode.plをCGIプログラムが置けるディレクトリ(たとえば /home/Hiroko/public_html/cgi-bin)に、
CGI プログラムとして認識される拡張子(たとえば「.cgi」で置く、ということです。これは CGI プログラム本体と同じです。

○まず、jcode.pl が Perl の共有ライブラリにない場合(「require 'jcode.pl';」で正しく読み込まれない場合)は、
適当なディレクトリに置く必要があります。ここでは「/home/Hiroko/public_html/cgi-bin」に置くことにします。

●p287 ▲2000/12/6 新着バグ
★後半のコード、網掛けの部分
×require 'jcode.cgi';
○require '/home/Hiroko/public_html/cgi-bin/jcode.pl';

●p287 ▲2000/12/6 新着バグ
★末尾
×まず、jcode.cgi(jcode.pl の拡張子を変えたもの)を require します。上の例では、hello.cgi と同じディレクトリに
保存しておきます。このとき、jcode.cgi も chmod a+x しておくのを忘れないでください。
○まず、jcode.pl を require します。上の例では、hello.cgi と同じディレクトリに保存しておきます。このとき、
jcode.pl も chmod a+r しておくのを忘れないでください。

●p288 ▲2000/12/6 新着バグ
★上の修正の直下に下のメモを入れてください。
メモ
Web サーバーの環境設定によっては、jcode.pl のパーミッションは全員に読み込み権がある状態(644、r--r--r--)でなく、
user のみにある状態(600、rw-----)や user と other のみにある状態(604、rw----r--)でも動作する場合があります。

●p291
★付録Aの末尾に次のメモを入れてください。

メモ:
Unicode の実装ですが、本章を脱稿後に大きな変化がありました。
・jcode.pl の後継である Jcode.pm という DAN kogai さんによる
  モジュール(本書では使い方を述べていません)で Unicode をサポートしています。
  Unicode にはいくつか種類があるのですが、UCS2 と UTF-8 をサポートしています。
・2000 年 3 月に正式リリースされた Perl 5.6(Perl 5.005 の次のバージョンです。
  バージョン番号の付け方が変わりました)でも UTF-8 をサポートしています。
が、どちらも 2000 年 5 月現在実験的機能で、完璧ではない可能性がありますので、
いろいろ文献に当たって自己責任でお使いになることをおすすめします。

●p313
★末尾のメモの枠線を他のところと同じく濃くしてください。

●p321
★宮下尚さんのページがリンク ブレークしています。わたしはユーザーが公開しているサイトしか
 発見できませんでした。

●p323
×(HirokoShimabukuro@speed.org など)
○(Hiroko.Shimabukuro@speed.org など)

●索引 T、U、V、W、X、Z
×value関数
○values関数

●あとがき ▼2001/11/11 新着バグ
×who allowed my "moonwritting" kindly.
○who allowed my "moonwriting" kindly.

(以上)