初めてのPerl 第5版

[cover photo]
  • Randal L. Schwartz, Tom Phoenix, brian d foy 著、近藤 嘉雪 訳
  • 2009年10月 発行
  • 424ページ
  • ISBN978-4-87311-427-9
  • フォーマット
  • 原書: Learning Perl, Fifth Edition

この商品は絶版になりました


Perlは、インターネット随一の働き者であり、また世界中のシステム管理者、ウェブハッカー、お気楽プログラマたちのお気に入り言語です。本書は「リャマ本」の愛称で親しまれ、多くの人々をPerlプログラミングへと導いたPerl入門書の決定版です。Perlコミュニティのキーマンであり、Perlトレーナーでもある著者らが、Perl学習者の実際的なニーズを取り入れて、改訂を重ねてきました。第5版では、学習を容易に進められるように、章の構成を見直して加筆し、またPerlの新しいバージョンにも対応しました。より効果的に(もちろん楽しく)学べるよう十分な改良が加えられています。本書を手にしているのなら、もうPerlの入門書選びに迷う必要はありません:-)

関連書籍

Perl & XML
Perl Hacks
Perlクックブック 第2版 VOLUME 1
Perlクックブック 第2版 VOLUME 2
Perlベストプラクティス
詳説 正規表現 第3版
プログラミングPerl 第3版 VOLUME 1
プログラミングPerl 第3版 VOLUME 2

訳者まえがき
はじめに
1章    Perl入門
    1.1 質問とその答え
        1.1.1 これはわたしに向いている本でしょうか?
        1.1.2 なぜこんなにたくさんの脚注が付いているのでしょうか?
        1.1.3 練習問題と解答について教えてください
        1.1.4 練習問題の先頭の数字は何を意味するのでしょうか?
        1.1.5 私はPerlコースの講師ですが、アドバイスをいただけますか?
    1.2 Perlとは何の略でしょうか?
        1.2.1 なぜLarryはPerlを創ったのでしょうか?
        1.2.2 なぜLarryはほかの言語を使わなかったのでしょうか?
        1.2.2 Perlは易しいでしょうか難しいでしょうか?
        1.2.3 Perlはどのようにしてこんなに人気を得るようになったのですか?
        1.2.4 いまPerlに何が起こっているのでしょうか?
        1.2.5 Perlはどんなことが得意でしょうか?
        1.2.6 Perlはどんなことが苦手でしょうか?
    1.3 どうやってPerlを手に入れるのでしょうか?
        1.3.1 CPANって何ですか?
        1.3.2 Perlのサポートを得るにはどうすればよいでしょうか?
        1.3.3 ほかの種類のサポートはあるのでしょうか?
        1.3.4 Perlのバグを発見したらどうすればよいでしょうか?
    1.4 どうやってPerlのプログラムを作るのでしょうか?
        1.4.1 単純なプログラム
        1.4.2 このプログラムの中身はどうなっているのでしょうか?
        1.4.3 どうやってPerlプログラムをコンパイルするのでしょうか?
    1.5 Perl早わかりツアー
    1.6 練習問題
2章    スカラーデータ
    2.1 数値
        2.1.1 すべての数値は同じ内部形式で表現される
        2.1.2 浮動小数点数リテラル
        2.1.3 整数リテラル
        2.1.4 10進数以外の整数リテラル
        2.1.5 数値演算子
    2.2 文字列
        2.2.1 シングルクォート文字列リテラル
        2.2.2 ダブルクォート文字列リテラル
        2.2.3 文字列演算子
        2.2.4 数値と文字列の自動変換
    2.3 Perlに組み込まれている警告メッセージ
    2.4 スカラー変数
        2.4.1 良い変数名を選ぶ
        2.4.2 スカラーの代入
        2.4.3 二項代入演算子
    2.5 printによる出力
        2.5.1 スカラー変数を文字列の中に展開する
        2.5.2 演算子の優先順位と結合
        2.5.3 比較演算子
    2.6 if制御構造
        2.6.1 ブール値
    2.7 ユーザからの入力を受け取る
    2.8 chomp演算子
    2.9 while制御構造
    2.9 未定義値
    2.10 defined関数
    2.11 練習問題
3章    リストと配列
    3.1 配列の要素にアクセスする
    3.2 配列の特別なインデクス
    3.3 リストリテラル
        3.3.1 qwショートカット
    3.4 リスト代入
    3.5 pop演算子とpush演算子
        3.5.1 shift演算子とunshift演算子
    3.6 配列を文字列の中に展開する
    3.7 foreach制御構造
        3.7.1 Perlお気に入りのデフォルト:$_
        3.7.2 reverse演算子
        3.7.3 sort演算子
    3.8 スカラーコンテキストとリストコンテキスト
        3.8.1 リストを生成する式をスカラーコンテキストで使う
        3.8.2 スカラーを生成する式をリストコンテキストで使う
        3.8.3 スカラーコンテキストを強制する
    3.9 リストコンテキストでを使う
    3.10 練習問題
4章    サブルーチン
    4.1 サブルーチンを定義する
    4.2 サブルーチンを起動する
    4.3 戻り値
    4.4 引数
    4.5 サブルーチンの中でプライベートな変数
    4.6 可変長のパラメータリスト
        4.6.1 改良版の&maxサブルーチン
        4.6.2 空のパラメータリスト
    4.7 レキシカル変数(my変数)についての注意事項
    4.8 use strictプラグマ
    4.9 return演算子
        4.9.1 アンパーサンドを省略する
    4.10 スカラー以外の戻り値
    4.11 永続的なプライベート変数
    4.12 練習問題
5章    入出力
    5.1 標準入力からの入力
    5.2 ダイヤモンド演算子からの入力
    5.3 起動引数
    5.4 標準出力への出力
    5.5 printfによるフォーマット付き出力
        5.5.1 配列とprintf
    5.6 ファイルハンドル
    5.7 ファイルハンドルをオープンする
        5.7.1 無効なファイルハンドル
        5.7.2 ファイルハンドルをクローズする
    5.8 dieによって致命的エラーを発生させる
        5.8.1 warnによって警告メッセージを表示する
    5.9 ファイルハンドルを使う
        5.9.1 デフォルトの出力ファイルハンドルを変える
    5.10 標準ファイルハンドルを再オープンする
    5.11 sayを使って出力する
    5.12 練習問題
6章    ハッシュ
    6.1 ハッシュとは?
        6.1.1 なぜハッシュを使うのか?
    6.2 ハッシュの要素にアクセスする
        6.2.1 ハッシュ全体を扱う
        6.2.2 ハッシュの代入
        6.2.3 太い矢印
    6.3 ハッシュ関数
        6.3.1 keys関数とvalues関数
        6.3.2 each関数
    6.4 ハッシュの利用法
        6.4.1 exists関数
        6.4.2 delete関数
        6.4.3 ハッシュの要素を変数展開する
    6.5 %ENVハッシュ
    6.6 練習問題
7章    正規表現の世界
    7.1 正規表現とは?
    7.2 単純なパターンを使う
        7.2.1 メタキャラクタについて
        7.2.2 単純な量指定子
        7.2.3 パターンをグループにまとめる
        7.2.4 選択肢
    7.3 文字クラス
        7.3.1 文字クラスのショートカット
        7.3.2 ショートカットの否定
    7.4 練習問題
8章    正規表現によるマッチ
    8.1 m//を使ってマッチを行なう
    8.2 オプション修飾子
        8.2.1 大文字と小文字を区別せずにマッチする:/i
        8.2.2 あらゆる文字にマッチする:/s
        8.2.3 空白文字を追加する:/x
        8.2.4 オプション修飾子をまとめて指定する
        8.2.5 その他のオプション
    8.3 アンカー
        8.3.1 ワードアンカー
    8.4 結合演算子 =~
    8.5 変数をパターンに埋め込む
    8.6 マッチ変数
        8.6.1 メモリの有効期限
        8.6.2 キャプチャなしのカッコ
        8.6.3 名前付きキャプチャ
        8.6.4 自動マッチ変数
    8.7 汎用の量指定子
    8.8 優先順位
        8.8.1 優先順位の例
        8.8.2 お楽しみはこれからだ
    8.9 パターンをテストするプログラム
    8.10 練習問題
9章    正規表現によるテキスト処理
    9.1 s///を使って置換を行なう
        9.1.1 /gによるグローバルな置換
        9.1.2 別のデリミタを使う
        9.1.3 オプション修飾子
        9.1.4 結合演算子
        9.1.5 大文字と小文字の変換
    9.2 split演算子
    9.3 join関数
    9.4 m//をリストコンテキストで使う
    9.5 より強力な正規表現機能
        9.5.1 欲ばりでない量指定子
        9.5.2 複数行のテキストに対するマッチ
        9.5.3 たくさんのファイルを更新する
        9.5.4 コマンドラインから書き戻し編集を行なう
    9.6 練習問題
10章    さまざまな制御構造
    10.1 unless制御構造
        10.1.1 unlessのelse節
    10.2 until制御構造
    10.3 式修飾子
    10.4 裸のブロック制御構造
    10.5 elsif節
    10.6 オートインクリメントとオートデクリメント
        10.6.1 オートインクリメントの値
    10.7 for制御構造
        10.7.1 foreachとforの秘められた関係
    10.8 ループを制御する
        10.8.1 last演算子
        10.8.2 next演算子
        10.8.3 redo演算子
        10.8.4 ラベル付きブロック
    10.9 三項演算子 ? :
    10.10 論理演算子
        10.10.1 短絡演算子の値
        10.10.2 defined-or演算子
        10.10.3 部分評価演算子を使って制御構造を実現する
    10.11 練習問題
11章    Perlモジュール
    11.1 モジュールを探す
    11.2 モジュールをインストールする
    11.3 単純なモジュールを使う
        11.3.1 File::Basenameモジュール
        11.3.2 モジュールの一部の関数だけを使う
        11.3.3 File::Specモジュール
        11.3.4 CGI.pm
        11.3.5 データベースとDBI
    11.4 練習問題
12章    ファイルテスト
    12.1 ファイルテスト演算子
        12.1.1 同じファイルの複数の属性をテストする
        12.1.2 ファイルテスト演算子を積み重ねる
    12.2 stat関数とlstat関数
    12.3 localtime関数
    12.4 ビット演算子
        12.4.1 ビットストリングを使う
    12.5 練習問題
13章    ディレクトリ操作
    13.1 ディレクトリツリーの中を移動する
    13.2 グロブ
    13.3 グロブのもう1つの書き方
    13.4 ディレクトリハンドル
    13.5 再帰的なディレクトリ処理
    13.6 ファイルとディレクトリの取り扱い
    13.7 ファイルを削除する
    13.8 ファイルの名前を変更する
    13.9 リンクとファイル
    13.10 ディレクトリの作成と削除
    13.11 パーミッションを変更する
    13.12 ファイルのオーナーを変更する
    13.13 タイムスタンプを変更する
    13.14 練習問題
14章    文字列処理とソート
    14.1 indexを使って部分文字列を探す
    14.2 substrを使って部分文字列をいじる
    14.3 sprintfを使ってデータをフォーマットする
        14.3.1 sprintfを使って金額を表示する
    14.4 高度なソート
        14.4.1 ハッシュを値によってソートする
        14.4.2 複数のキーでソートする
    14.5 練習問題
15章    スマートマッチとgiven-when
    15.1 スマートマッチ演算子
    15.2 スマートマッチの優先順位
    15.3 given文
    15.4 ダムマッチ
    15.5 多くの項目をwhenで扱う
    15.6 練習問題
16章    プロセス管理
    16.1 system関数
        16.1.1 シェルの起動を避ける
    16.2 exec関数
    16.3 環境変数
    16.4 逆クォートを使って出力を取り込む
        16.4.1 リストコンテキストで逆クォートを使う
    16.5 プロセスをファイルハンドルとして使う
    16.6 forkを使って低レベル処理を行なう
    16.7 シグナルを送受信する
    16.8 練習問題
17章    上級テクニック
    17.1 evalによってエラーをトラップする
    17.2 grepを使ってリストから要素を選び出す
    17.3 mapを使ってリストの要素を変換する
    17.4 クォートなしのハッシュキー
    17.5 スライス
        17.5.1 配列スライス
        17.5.2 ハッシュスライス
    17.6 練習問題
付録A  練習問題の解答
    2章の練習問題の解答
    3章の練習問題の解答
    4章の練習問題の解答
    5章の練習問題の解答
    6章の練習問題の解答
    7章の練習問題の解答
    8章の練習問題の解答
    9章の練習問題の解答
    10章の練習問題の解答
    11章の練習問題の解答
    12章の練習問題の解答
    13章の練習問題の解答
    14章の練習問題の解答
    15章の練習問題の解答
    16章の練習問題の解答
    17章の練習問題の解答
付録B リャマを越えて
    B.1 豊富なドキュメント
    B.2 正規表現
    B.3 パッケージ
    B.4 Perlの機能を拡張する
        B.4.1 ライブラリ
        B.4.2 モジュール
        B.4.3 モジュールを探してインストールする
        B.4.4 自分でモジュールを書く
    B.5 重要なモジュール
        B.5.1 CGIモジュール
        B.5.2 Cwdモジュール
        B.5.3 Fatalモジュール
        B.5.4 File::Basenameモジュール
        B.5.5 File::Copyモジュール
        B.5.6 File::Specモジュール
        B.5.7 Image::Sizeモジュール
        B.5.8 Net::SMTPモジュール
        B.5.9 POSIXモジュール
        B.5.10 Sys::Hostnameモジュール
        B.5.11 Text::Wrapモジュール
        B.5.12 Time::Localモジュール
    B.6 プラグマ
        B.6.1 constantプラグマ
        B.6.2 diagnosticsプラグマ
        B.6.3 libプラグマ
        B.6.4 strictプラグマ
        B.6.5 varsプラグマ
        B.6.6 warningsプラグマ
    B.7 データベース
        B.7.1 システムデータベースに直接アクセスする
        B.7.2 フラットなファイルのデータベースにアクセスする
    B.8 その他の演算子と関数
        B.8.1 tr/ / /による変換
        B.8.2 ヒアドキュメント
    B.9 数学
        B.9.1 高度な数学関数
        B.9.2 虚数と複素数
        B.9.3 大きな数と高精度な数
    B.10 リストと配列
        B.10.1 mapとgrep
        B.10.2 splice演算子
    B.11 ビット操作
    B.12 フォーマット
    B.13 ネットワークとIPC
        B.13.1 System V IPC
        B.13.2 ソケット
    B.14 セキュリティ
    B.15 デバッグ
    B.16 CGI(Common Gateway Interface)
    B.17 コマンドラインオプション
    B.18 組み込み変数
    B.19 さまざまな構文
    B.20 リファレンス
        B.20.1 複雑なデータ構造
        B.20.2 オブジェクト指向プログラミング
        B.20.3 無名サブルーチンとクロージャ
    B.21 タイ変数
    B.22 演算子オーバーロード
    B.23 ダイナミックロード
    B.24 Perlをほかのプログラムに組み込む
    B.25 他の言語からPerlへの変換
    B.26 findコマンドラインをPerlに変換する
    B.27 コマンドラインオプションを受け取る
    B.28 ドキュメントを埋め込む
    B.29 ファイルハンドルをオープンするほかの方法
    B.30 ロケールとUnicode
    B.31 スレッドとフォーク
    B.32 グラフィカルユーザインターフェース(GUI)
    B.33 そしてまだまだ続く……

索引

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。

「\」となっているのは、すべて半角逆スラッシュです。

P.20 上から6行目と下から1行目
  【誤】 /\U$1/g
  【正】 /\U\1/g

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。

「\」となっているのは、すべて半角逆スラッシュです。

P.20 上から6行目と下から1行目
  【誤】 /\U\1/g
  【正】 /\U$1/g
   *2刷で修正した上記の箇所は、今回のケースでは$1と書くのが正しく、
   改めて訂正いたします。\1という書き方は古い書き方で、
   古いコードとの互換性を保つために通るようになっているものです。

P.103  脚注33
  【誤】 例えば、use 5.6と宣言します。
  【正】 例えば、use 5.006と宣言します。

P.116  上から3行目
  【誤】 ホスト名(http://www.stonehenge.com
  【正】 ホスト名(www.stonehenge.com

P.127  下から3行目
  【誤】% setenv CHARACTER=Fred
  【正】% setenv CHARACTER Fred

P.134  下から13行目(2番目のコード例の3行目)
  【誤】 print "It matched the same after y and d!\n";
  【正】 print "It matched a after the y\n";

P.136  上から10行目(2番目のコード例の2行目)
  【誤】 $_ = "aa11bb";
  【正】 $_ = "xaa11bb";

P.158  脚注26 の1行目
  【誤】 YAPE::Regexp::Explain
  【正】 YAPE::Regex::Explain

P.160  問題5の4行目
  【誤】 最大5文字は yestになります。
  【正】 最大5文字は" yest"になります。

P.174  下から9行目
  【誤】 (14章で紹介する
  【正】 (13章(240ページ)で紹介する

P.200  上から4行目
  【誤】 foreach my $try ( 0, undef, '0', 1, 25 ) {
  【正】 foreach $try ( 0, undef, '0', 1, 25 ) {

P.213  下から8行目
  【誤】 foreach my $param ( param() )
  【正】 foreach $param ( param() )

P.214  上から7行目
  【誤】 foreach my $param ( param() )
  【正】 foreach $param ( param() )

P.245  上から10行目
  【誤】 それはシンボリックリンクですが、(指されるものが)存
  【正】 それはシンボリックリンクですが、指されるものが存

P.277  上から2行目
  【誤】 when( /^-?\d+\.\d+$/ ) { # スマート
  【正】 when( ! /^-?\d+\.\d+$/ ) { # スマート

P.277  下から3行目
  【誤】 when( ! /fred/i   } { #ダム
  【正】 when( ! /fred/i )   { #ダム

P.280  問題4のコードの4〜5行目
  【誤】 foreach my $divisor ( 2 .. $number/2 ) ) {
             push @divisors, $divisor unless $_ % $divisor;

  【正】 foreach my $divisor ( 2 .. ( $number/2 ) ) {
             push @divisors, $divisor unless $number % $divisor;

P.336  上から12行目
  【誤】 $ENV{$key} ? $ENV{$key} : "(undefined)"; 
  【正】 defined $ENV{$key} ? $ENV{$key} : "(undefined)";

P.349  問題2のコードの6行目
  【誤】 $what .= ' buzz';
  【正】 $what .= ' bin';

Feedback

皆さんのご意見をお聞かせください。ご購入いただいた書籍やオライリー・ジャパンへのご感想やご意見、ご提案などをお聞かせください。より良い書籍づくりやサービス改良のための参考にさせていただきます。
[feedbackページへ]