Perlクックブック
――Perlの鉄人が贈るレシピ集

[cover photo]
  • 2001年03月 発行
  • 816ページ
  • ISBN4-87311-037-8

この商品は品切れ再入荷未定です

この書籍は改訂更新され、絶版となりました。 最新版の書籍をご確認ください。

本書の目的は、Perlをより深く学ぶことにあります。それは、リファレンスでもなくチュートリアルでもない、両者の姉妹本といえます。Perlの基礎については、すでに知っているが、構成要素を組み合わせて完全なプログラムを書くまでには至っていないという人向けに書かれたものですが、20の章と300を超えるレシピで構成される本書は、初心者であれ熟練者であれ必ず遭遇するであろう問題に対する何千もの解答が用意されており、Perlプログラマ必携の書といえるでしょう。 本書の構成は料理本をまねています。料理本と同じように何か知りたいことがあるのなら、それに相当するレシピを探せばよいのです。自分の問題にピッタリ合った解法が見つからないとしてもよいヒントになるはずです。またレシピは前にある章ほどやさしく、後ろに進むにしたがって熟練プログラマ向けになっており、各章のレシピも前にあるものほどやさしい、よくある問題を扱うようにしていま す。このように本書は必要な個所だけを拾い読みしても、最初から順に読んでいっても役に立つよう配慮されています。このような工夫がなされている本書は、数あるPerl本の中でも特別な地位を獲得すると信じています。

本書に寄せて
訳者まえがき
まえがき
        本書の内容
        実行環境について
        参考書籍
        本書の表記法
        ドキュメント規則
        意見と質問
        謝辞

 1 章    文字列
        概要
        レシピ1.1  部分文字列を取り出す
        レシピ1.2  デフォルト値を設定する
        レシピ1.3  一時変数を使わずに値を交換する
        レシピ1.4  ASCII文字をコード値に(コード値をASCII文字に)変換する
        レシピ1.5  文字列を1文字ずつ処理する
        レシピ1.6  文字列を単語または文字単位で逆順にする
        レシピ1.7  タブをスペースに/スペースをタブに
        レシピ1.8  ユーザ入力内の変数を展開する
        レシピ1.9  大文字/小文字の変換
        レシピ1.10 文字列中の関数と式を展開する
        レシピ1.11 ヒアドキュメントをインデントする
        レシピ1.12 段落を整形する
        レシピ1.13 文字をエスケープする
        レシピ1.14 文字列の先頭と末尾の空白文字を削除する
        レシピ1.15 カンマで区切られたデータ(CSV)の解析
        レシピ1.16 Soundexマッチング
        プログラム1.1        fixstyle
        プログラム1.2        psgrep

 2 章    数値
        概要
        レシピ2.1  文字列が有効な数値を表すかどうかチェックする
        レシピ2.2  浮動小数点数を比較する
        レシピ2.3  浮動小数点数を丸める
        レシピ2.4  2進表現を10進表現(10進表現を2進表現)に変換する
        レシピ2.5  連続する整数を操作する
        レシピ2.6  ローマ数字を扱う
        レシピ2.7  乱数を生成する
        レシピ2.8  異なる乱数を生成する
        レシピ2.9  乱数をもっとランダムにする
        レシピ2.10 偏りのある乱数を生成する
        レシピ2.11 ラジアンではなく、度で三角法を実行する
        レシピ2.12 三角関数を計算する
        レシピ2.13 対数をとる
        レシピ2.14 行列の積を計算する
        レシピ2.15 複素数を使用する
        レシピ2.16 8進数と16進数を10進数に変換する
        レシピ2.17 数値を位取り用のカンマで区切る
        レシピ2.18 正しい複数形を出力する
        プログラム2.1        素因数分解

 3 章    日付と時刻
        概要
        レシピ3.1  今日の日付を得る
        レシピ3.2  DMYHMSをエポック秒に変換する
        レシピ3.3  エポック秒をDMYHMSに変換する
        レシピ3.4  日付の加減算を行なう
        レシピ3.5  2つの日付の差を求める
        レシピ3.6  日付が何曜日、何日、年初から何日め、年初から何週めになるかを求める
        レシピ3.7  文字列をパースして日付と時刻を取り出す
        レシピ3.8  日付を出力する
        レシピ3.9  高精度タイマー
        レシピ3.10 短いスリープ
        プログラム3.1        hopdelta

 4 章    配列
        概要
        レシピ4.1  プログラム内でリストを定義する
        レシピ4.2  リストをカンマ付きで出力する
        レシピ4.3  配列のサイズを変更する
        レシピ4.4  リストの全要素について何かする
        レシピ4.5  配列要素に対する繰り返し処理をリファレンスで書きたい
        レシピ4.6  リストから一意な要素を取り出す(重複する要素を取り除く)
        レシピ4.7  一方の配列にはあって他方の配列にはない要素を見つける
        レシピ4.8  一意なリストの和、差、積を計算する
        レシピ4.9  2つの配列を連結する
        レシピ4.10 配列を逆順にする
        レシピ4.11 配列の複数の要素を処理する
        レシピ4.12 テストをパスする最初の要素を見つける
        レシピ4.13 特定の条件を満たす配列内の要素をすべて見つける
        レシピ4.14 配列を数値でソートする
        レシピ4.15 計算可能なフィールドでリストをソートする
        レシピ4.16 循環リストを実装する
        レシピ4.17 配列をランダマイズする
        プログラム4.1        words
        プログラム4.2        permute

 5 章    ハッシュ
        概要
                参考
        レシピ5.1  ハッシュに要素を追加する
        レシピ5.2  ハッシュ内にキーが存在するかどうか調べる
        レシピ5.3  ハッシュからエントリを削除する
        レシピ5.4  ハッシュのエントリを処理する
        レシピ5.5  ハッシュを出力する
        レシピ5.6  ハッシュ要素を挿入した順に取り出す
        レシピ5.7  1つのキーに複数の値が対応するハッシュ
        レシピ5.8  ハッシュを反転する
        レシピ5.9  ハッシュをソートする
        レシピ5.10 ハッシュをマージする
        レシピ5.11 2つのハッシュの両方にあるキー、または一方にしかないキーを見つける
        レシピ5.12 リファレンスをハッシュする
        レシピ5.13 ハッシュのサイズを事前に決める
        レシピ5.14 最もよく現れるデータを見つけたい
        レシピ5.15 データ間の関係を表現する
        プログラム5.1        dutree

 6 章    パターンマッチ
        概要
                3つの謎
                パターンマッチ修飾子
                特殊変数
        レシピ6.1  コピーと置換を同時に行ないたい
        レシピ6.2  文字にマッチさせる
        レシピ6.3  単語にマッチさせる
        レシピ6.4  正規表現にコメントをつける
        レシピ6.5  N番めのマッチを見つける
        レシピ6.6  複数行のマッチング
        レシピ6.7  パターンで区切られたレコードを読む
        レシピ6.8  一定範囲の行を取り出す
        レシピ6.9  シェルのグロブを正規表現としてマッチさせる
        レシピ6.10 展開マッチの処理速度を上げる
        レシピ6.11 パターンが有効かどうかをテストする
        レシピ6.12 正規表現内でロケール設定にしたがう
        レシピ6.13 あいまいなマッチング
        レシピ6.14 前回パターンがマッチした位置からマッチングを行なう
        レシピ6.15 欲張りマッチと非欲張りマッチ
        レシピ6.16 重複する単語を削除する
        レシピ6.17 文字列パターン内で、AND、OR、NOTを表現する
        レシピ6.18 マルチバイト文字にマッチさせる
        レシピ6.19 有効なメールアドレスにマッチさせる
        レシピ6.20 省略形にマッチさせる
        プログラム6.1        urlify
        プログラム6.2        tcgrep
        レシピ6.21 正規表現集

 7 章    ファイルアクセス
        概要
                ファイルハンドルを取得する
                標準のファイルハンドル
                入出力操作
        レシピ7.1  ファイルをオープンする
        レシピ7.2  普通と違うファイル名でファイルをオープンする
        レシピ7.3  ファイル名に含まれるチルダを展開する
        レシピ7.4  エラーをファイル名で報告する
        レシピ7.5  一時ファイルを作成する
        レシピ7.6  プログラムの内部にファイルを格納する
        レシピ7.7  フィルタを書く
        レシピ7.8  ファイルを一時ファイルを使ってその場で更新する
        レシピ7.9  ファイルを-iスイッチを使ってその場で更新する
        レシピ7.10 一時ファイルを使わずにファイルをその場で更新する
        レシピ7.11 ファイルをロックする
        レシピ7.12 出力をフラッシュする
        レシピ7.13 プログラムの実行をブロックせずに多くのファイルハンドルから読み込む
        レシピ7.14 非ブロック型I/Oを行なう
        レシピ7.15 読み取るバイト数を決定する
        レシピ7.16 ファイルハンドルを変数に格納する
        レシピ7.17 オープンされた出力ファイルハンドルをキャッシュする
        レシピ7.18 多くのファイルハンドルに同時に書き出す
        レシピ7.19 ファイルディスクリプタを数値でオープンまたはクローズする
        レシピ7.20 ファイルハンドルをコピーする
        プログラム7.1        netlock
        プログラム7.2        lockarea

 8 章    ファイルコンテンツ 
        概要
        レシピ8.1  継続文字のある行を読む
        レシピ8.2  ファイルの行数(段落数、レコード数)をカウントする
        レシピ8.3  ファイル内のすべての単語を処理する
        レシピ8.4  ファイルを行単位または段落単位で逆向きに読む
        レシピ8.5  成長するファイルを追いかけながら読む
        レシピ8.6  ファイルから行をランダムに取り出す
        レシピ8.7  ファイル内のすべての行をシャッフルしたい
        レシピ8.8  ファイル内の特定の行を読み込む
        レシピ8.9  可変長テキストフィールドを処理する
        レシピ8.10 ファイルの最後の行を削除する
        レシピ8.11 バイナリファイルを処理する
        レシピ8.12 ランダムアクセスI/Oを使用する
        レシピ8.13 ランダムアクセスファイルを更新する
        レシピ8.14 バイナリファイルから文字列を読み取る
        レシピ8.15 固定長レコードを読む
        レシピ8.16 configファイルを読む
        レシピ8.17 ファイルの信頼性をテストする
        プログラム8.1        tailwtmp
        プログラム8.2        tctee
        プログラム8.3        laston

 9 章    ディレクトリ
        概要
                まとめ
        レシピ9.1  タイムスタンプを取得/設定する
        レシピ9.2  ファイルを削除する
        レシピ9.3  ファイルをコピーまたは移動する
        レシピ9.4  同じファイルに2つの異なる名前をつける
        レシピ9.5  ディレクトリ内のすべてのファイルを処理する
        レシピ9.6  パターンにマッチするファイル名のリストを取得する(グロブする)
        レシピ9.7  ディレクトリ内のすべてのファイルを再帰的に処理する
        レシピ9.8  ディレクトリとその中身を削除する
        レシピ9.9  ファイルをリネームする
        レシピ9.10 ファイル名をその構成要素に分割する
        プログラム9.1        symirror
        プログラム9.2        lst

10章     サブルーチン
        概要
        レシピ10.1 サブルーチンの引数にアクセスする
        レシピ10.2 変数を関数内に局所化する
        レシピ10.3 永続的な局所変数を作成する
        レシピ10.4 実行中の関数の名前を知る
        レシピ10.5 配列やハッシュをリファレンスで渡す
        レシピ10.6 戻り値のコンテキストを調べる
        レシピ10.7 名前付き引数を渡す
        レシピ10.8 いくつかの戻り値を捨てる
        レシピ10.9 2つ以上の配列またはハッシュを返す
        レシピ10.10        エラーを返す
        レシピ10.11        関数の型宣言(プロトタイプ)
        レシピ10.12        例外処理
        レシピ10.13        グローバル変数を退避する
        レシピ10.14        関数を再定義する
        レシピ10.15        AUTOLOADを使って未定義関数の呼び出しをトラップする
        レシピ10.16        サブルーチンをネスト(入れ子に)する
        プログラム10.1       メールをソートする

11章     リファレンスとレコード
        概要
                リファレンス
                無名データ ?
                レコード
        レシピ11.1 配列のリファレンスを取得する
        レシピ11.2 配列のハッシュを作成する
        レシピ11.3 ハッシュのリファレンスを取得する
        レシピ11.4 関数へのリファレンスを取得する
        レシピ11.5 スカラーへのリファレンスを取得する
        レシピ11.6 スカラーリファレンスの配列を作成する
        レシピ11.7 オブジェクトの代わりにクロージャを使用する
        レシピ11.8 メソッドへのリファレンスを作成する
        レシピ11.9 レコードを作成する
        レシピ11.10        ハッシュレコードをテキストファイルに書き出す(テキストファイルから読み込む)
        レシピ11.11        データ構造体を出力する
        レシピ11.12        データ構造体をコピーする
        レシピ11.13        データ構造体をディスクに保存する
        レシピ11.14        透過的な持続性データ構造体
        プログラム11.1       2分木

12章     パッケージ、ライブラリ、モジュール
        概要
                モジュール
                インポートとエクスポートのルール
                その他のライブラリファイル
                車輪を再発明するな(利用できるものは利用せよ)
        レシピ12.1 モジュールのインタフェースを定義する
        レシピ12.2 requireまたはuseで発生したエラーをトラップする
        レシピ12.3 実行時までuseの実行を遅らせる
        レシピ12.4 変数をモジュール内に局所化する
        レシピ12.5 呼び出し元のパッケージを知る
        レシピ12.6 モジュールの後処理を自動化する
        レシピ12.7 自分自身のモジュールディレクトリを持つ
        レシピ12.8 モジュールを配布する準備をする
        レシピ12.9 SelfLoaderを使ってモジュールの読み込みを高速化する
        レシピ12.10        AutoLoaderを使ってモジュールの読み込みを高速化する
        レシピ12.11        組み込み関数をオーバーライドする
        レシピ12.12        組み込み関数のようにエラーや警告を出力する
        レシピ12.13        パッケージを間接的に参照する
        レシピ12.14        h2phを使用してCの#includeファイルを変換する
        レシピ12.15        h2xsでCのコードを使用したモジュールを作成する
        レシピ12.16        PODでモジュールのコメントを書く
        レシピ12.17        CPANモジュールをビルドおよびインストールする
        プログラム12.1       モジュールテンプレート
        プログラム12.2       インストールしたモジュールのバージョンと説明を検索する

13章     クラス、オブジェクト、tie
        概要
                オブジェクトの傘の下
                メソッド
                継承
                間接オブジェクト記法に関する注意
                オブジェクト関連用語について
                哲学的な余談
        レシピ13.1 オブジェクトを作成する
        レシピ13.2 オブジェクトを破壊する
        レシピ13.3 インスタンスデータを管理する
        レシピ13.4 クラスデータを管理する
        レシピ13.5 クラスを構造体として使う
        レシピ13.6 オブジェクトを複製する
        レシピ13.7 メソッドを間接的に呼び出す
        レシピ13.8 サブクラス関係かどうか判定する
        レシピ13.9 継承可能なクラスを書く
        レシピ13.10        オーバーライドされたメソッドにアクセスする
        レシピ13.11        AUTOLOADを使って属性メソッドを生成する
        レシピ13.12        データ継承に関する問題を解決する
        レシピ13.13        環状データ構造を扱う
        レシピ13.14        演算子をオーバーロードする
                例:演算子オーバーロードを使用したStrNumクラス
                例:演算子オーバーロードを使用したFixNumクラス
        レシピ13.15        tieを使ってマジック変数を作成する
                tieモジュールの例:local宣言されていない$_変数を使用禁止にする
                tieモジュールの例:値が常に追加されるハッシュを作成する
                tieモジュールの例:大文字と小文字を区別しないハッシュ
                tieモジュールの例:キーと値のどちらでも検索できるハッシュ
                tieモジュールの例:アクセス回数をカウントするハンドル
                tieモジュールの例:複数の書き出し先を持つファイルハンドル

14章     データベースアクセス
        概要
        レシピ14.1 DBMファイルを作成/使用する
        レシピ14.2 DBMファイルを空にする
        レシピ14.3 異なるDBMファイルに変換する
        レシピ14.4 DBMファイルをマージする
        レシピ14.5 DBMファイルをロックする
        レシピ14.6 大規模なDBMファイルをソートする
        レシピ14.7 テキストファイルをデータベース配列として扱う
        レシピ14.8 DBMファイルに複雑なデータを格納する
        レシピ14.9 永続的なデータ
        レシピ14.10        DBIおよびDBDを使用してSQLコマンドを実行する
        プログラム14.1       ggh─Netscapeの履歴をgrepする

15章     ユーザインタフェース
        概要
        レシピ15.1 プログラムの引数を解析する
        レシピ15.2 プログラムがインタラクティブに動作しているかどうかを判定する
        レシピ15.3 画面を消去する
        レシピ15.4 端末またはウィンドウのサイズを調べる
        レシピ15.5 テキストの色を変える
        レシピ15.6 キーボードから読み取る
        レシピ15.7 端末でビープ音を鳴らす
        レシピ15.8 POSIX termiosを使用する
        レシピ15.9 入力待ちをチェックする
        レシピ15.10        パスワードを読む
        レシピ15.11        入力を編集する
        レシピ15.12        画面を制御する
        レシピ15.13        Expectモジュールを使って別のプログラムを制御する
        レシピ15.14        Tkを使ってメニューを作成する
        レシピ15.15        Tkでダイアログボックスを作成する
        レシピ15.16        Tkのウィンドウサイズ変更イベントに応答する
        レシピ15.17        Windows Perl/Tkを使ってDOS窓が表示されないようにする
        プログラム15.1       小さなtermcapプログラム
        プログラム15.2       tkshufflepod

16章     プロセス管理とプロセス間通信
        概要
                プロセスの作成
                シグナル
        レシピ16.1 プログラムの出力を収集する
        レシピ16.2 別のプログラムを起動する
        レシピ16.3 現在のプログラムを別のプログラムで置換する
        レシピ16.4 別のプログラムと読み書きする
        レシピ16.5 自分の出力をフィルタリングする
        レシピ16.6 入力を前処理する
        レシピ16.7 プログラムのSTDERRを読み込む
        レシピ16.8 相手プログラムの入力と出力を制御する
        レシピ16.9 相手プログラムの入力、出力、エラー出力を制御する
        レシピ16.10        関連プロセス間で通信する
        レシピ16.11        名前付きパイプを使ってプロセスをファイルのように見せる
        レシピ16.12        異なるプロセス間で変数を共有する
        レシピ16.13        使用可能なシグナルを一覧表示する
        レシピ16.14        シグナルを送信する
        レシピ16.15        シグナルハンドラを設定する
        レシピ16.16        一時的にシグナルハンドラを上書きする
        レシピ16.17        シグナルハンドラを書く
        レシピ16.18        Ctrl-Cを捕捉する
        レシピ16.19        ゾンビプロセスの蓄積を避ける
        レシピ16.20        シグナルをブロックする
        レシピ16.21        操作をタイムアウトにする
        プログラム16.1       sigrand

17章     ソケット
        概要
        レシピ17.1 TCPクライアントを書く
        レシピ17.2 TCPサーバを書く
        レシピ17.3 TCPを介して通信する
        レシピ17.4 UDPクライアントをセットアップする
        レシピ17.5 UDPサーバをセットアップする
        レシピ17.6 UNIXドメインソケットを使う
        レシピ17.7 ソケットの他方の端を特定する
        レシピ17.8 自分自身の名前とアドレスを知る
        レシピ17.9 forkした後、ソケットをクローズする
        レシピ17.10        双方向クライアントを書く
        レシピ17.11        サーバをforkする
        レシピ17.12        サーバをあらかじめforkしておく
        レシピ17.13        forkしないサーバ
        レシピ17.14        マルチホームドサーバを書く
        レシピ17.15        デーモンを作成する
        レシピ17.16        要求に応じてサーバを再起動する
        プログラム17.1       backsniff
        プログラム17.2       fwdport

18章     インターネットサービス
        概要
        レシピ18.1 単純なDNSルックアップ
        レシピ18.2 FTPクライアントになる
        レシピ18.3 メールを送信する
        レシピ18.4 Usenetニュースメッセージの購読と投稿
        レシピ18.5 POP3を使ってメールを読む
        レシピ18.6 プログラムからtelnetをシミュレートする
        レシピ18.7 マシンをpingする
        レシピ18.8 Whoisを使用してInterNICから情報を検索する
        プログラム18.1       expnとvrfy

19章     CGIプログラミング
        概要       681
                アーキテクチャ
                動作概要
                セキュリティ
                HTMLとフォーム
                Web関連リソース
        レシピ19.1 CGIスクリプトを書く
        レシピ19.2 エラーメッセージをリダイレクトする
        レシピ19.3 500 Server Errorに対処する
        レシピ19.4 安全なCGIプログラムを書く
        レシピ19.5 CGIスクリプトの効率アップを図る
        レシピ19.6 シェルエスケープなしでコマンドを実行する
        レシピ19.7 HTMLショートカット関数を使ってHTML形式のリストや表を簡単に作成する
        レシピ19.8 別のロケーションにリダイレクトする
        レシピ19.9 HTTPによるやり取りを直接デバッグする
        レシピ19.10        クッキーを管理する
        レシピ19.11        Stickyウィジェットを作成する
        レシピ19.12        マルチスクリーンCGIスクリプトを書く
        レシピ19.13        フォームをファイルまたはメールパイプに保存する
        プログラム19.1       chemiserie

20章     Webオートメーション
        概要
        レシピ20.1 特定のURLからドキュメント抽出する
        レシピ20.2 フォームの自動送信
        レシピ20.3 URLを取り出す
        レシピ20.4 ASCIIテキストをHTMLに変換する
        レシピ20.5 HTMLからASCIIテキストに変換する
        レシピ20.6 HTMLタグを取り出す/削除する
        レシピ20.7 切れたリンクを見つける
        レシピ20.8 最新のリンクを見つける
        レシピ20.9 HTMLテンプレートを作成する
        レシピ20.10        Webページをミラーリングする
        レシピ20.11        ロボットを作成する
        レシピ20.12        Webサーバのログファイルを解析する
        レシピ20.13        サーバログを処理する
        プログラム20.1       htmlsub
        プログラム20.2       hrefsub
索 引

サンプルプログラムの目次
例1-1    slowcat(ゆっくりとテキストを出力)
例1-2    randcap(入力文字の20%をランダムに大文字にする)
例1-3    wrapdemo(Text::Wrapの動作方法を見る)
例1-4    fixstyle(の左側の文字列を右側の文字列に置換)
例1-5    fixstyle2(fixstyleの高速版)
例1-6    psgrep(psの出力から条件を満たす行だけを抽出)
例2-1    bigfact(素因数分解を行なう)
例3-1    hopdelta(各ホップでの遅延時間を出力)
例4-1    commify_series(リスト出力に適切なカンマを挿入)
例4-2    words(行を収集して列に出力する)
例4-3    tsc_permute(tsc版単語の並びの全順列を返す)
例4-4    mjd_permute(mjd版単語の並びの全順列を返す)
例5-1    countfrom(送信者別のメッセージ数をカウント)
例5-2    foodfind(色に対応する食べ物、または食べ物に対応する色を検索)
例5-3    dutree(duの出力をソートかつインデントされた形式に変換)
例5-4    dutree_orig(perl5より前のバージョンでのdutree)
例6-1    resname(foo.bar.comをfoo.bar.com[204.148.40.9]に変換)
例6-2    killtags(HTMLタグ削除(あまりよくない))
例6-3    headerfy(章ヘッダをHTMLタグで囲む)
例6-4    popgrep1(配列に格納されている項目のマッチ−遅いがわかりやすい)
例6-5    popgrep2(配列に格納されている項目のマッチ−速いがクォートするのが厄介)
例6-6    popgrep3(配列に格納されている項目のマッチ−build_match_funcのアルゴリズムを使用)
例6-7    grepauth(1つのパターンまたはすべてのパターンがマッチしたとき真を返す)
例6-8    popgrep4(配列に格納されている項目のマッチ −Regexpモジュールを使用)
例6-9    paragrep(パラグラフをgrepするちょっとしたプログラム)
例6-10   localeg(ロケールの効果を試す)
例6-11   prime_pattern(パターンマッチを使用して引数を素因数分解)
例6-12   minigrep(簡易grep)
例6-13   urlify(URL(またはそれらしきもの)をハイパーリンクにする)
例6-14   tcgrep(Tom Christiansen作、Perl版grep)
例7-1    findlogin1(文字列"login"を含むすべての行を出力(1))
例7-2    findlogin2(文字列"login"を含むすべての行を出力(2))
例7-3    lowercase1(すべての行を小文字に変換(1))
例7-4    lowercase2(すべての行を小文字に変換(2))
例7-5    countchunks(単語の数を数える)
例7-6    seeme(stdioバッファリングによる出力の例)
例7-7    getpcomidx(www.perl.comのindex.htmlドキュメントを取得)
例7-8    splitwulog(wuftpdのログを認証済みユーザごとに別ファイルに分割)
例7-9    drivelock(File::LockDirモジュールのデモ)
例7-10   File::LockDir(File::LockDirモジュール)
例7-11   lockarea(fcntlによるレコードロックのデモ)
例8-1    print_line-v1(print_line−線形方式)
例8-2    print_line-v2(print_line−インデックス方式)
例8-3    print_line-v3(print_line−DB_File方式)
例8-4    weekearly(指定されたユーザのログイン日付を1週間前に変更)
例8-5    bgets(バイナリファイルの指定されたアドレスから文字列を読み込む)
例8-6    strings(バイナリファイルから文字列を取り出す)
例8-7    tailwtmp(ログインとログアウトを監視)
例8-8    tctee(Tom Christiansen作、Perl版tee)
例8-9    laston(指定されたユーザが最後にログインした日時を知る)
例9-1    uvi(アクセス時刻を変更せずにファイルを編集)
例9-2    fdirs(すべてのディレクトリを探索)
例9-3    rmtree1(ディレクトリツリー全体を削除する(1))
例9-4    rmtree2(ディレクトリツリー全体を削除する(2))
例9-5    rename(ファイル名の変更)
例9-6    symirror(ディレクトリツリーの複写)
例9-7    lst(ディレクトリの内容を深さ優先で探索しソートしてリスト表示)
例10-1   bysub1(件名によるソート)
例10-2   bysub2(件名によるソート(awk風))
例10-3   bysub3(件名によるソート(ハッシュレコードを使用))
例10-4   datesort(件名を主キー、日付を副キーにしてソート)
例11-1   bintree(2分木のデモ)
例12-1   jam(文字を飲み込む)
例12-2   winsz(行と列を文字数またはピクセル数で計算)
例12-3   pmdesc(インストールされているPerlモジュールの名前、バージョン、説明を出力)
例13-1   StrNum(StrNumクラス)
例13-2   FixNum(FixNumクラス)
例13-3   ValueRing(ValueRingクラス)
例13-4   UnderScore(UnderScoreモジュール)
例13-5   Tie::AppendHash(キーが配列に蓄積されるハッシュを生成)
例13-6   Tie::Folded(キーの大文字と小文字を区別しないハッシュ)
例13-7   Tie::RevHash(キーと値のどちらでも検索できるハッシュ)
例13-8   Counter(Counterクラスの最も簡単な実装)
例13-9   Tie::Tee(teeのような機能を実装するtieハンドル)
例14-1   userstats(ログインしているユーザの統計)
例14-2   db2gdbm(DBをGDBMに変換)
例14-3   dblockdemo(データベースロックのデモ)
例14-4   sortdemo(自動的なdbmソートのデモ)
例14-5   recno_demo(recnoインタフェースへのAPIを直接使用したデモ)
例14-6   mldbm-demo(MLDBMにDB_Fileを使用したデモ)
例14-7   dbusers(MySQLのusers表を管理)
例14-8   ggh(Netscapeの履歴ファイルを調べる)
例15-1   sascii(押されたキーのASCII値を表示)
例15-2   demo POSIX termios(POSIX termiosのデモ)
例15-3   checkuser(正しいパスワードかどうかチェック)
例15-4   vbsh(単純なシェル)
例15-5   rep(コマンドを画面上で繰り返し実行)
例15-6   tksample3(ダイアログボックスのデモ)
例15-7   tksample4(警告ダイアログボックスをポップアップ)
例15-8   loader(DOS窓を表示せずにPerlスクリプトを起動)
例15-9   tcapdemo(カーソル位置を直接制御)
例15-10  tkshufflepod(podファイル内の=head1セクションを並び替える)
例16-1   qnumcat(加算的出力フィルタのデモ)
例16-2   cmd3sel(子の入力、出力、エラーをすべて制御)
例16-3   pipe1(pipeとforkを使用して親が子に書き出す)
例16-4   pipe2(pipeとforkを使用して子が親に書き出す)
例16-5   pipe3(fork形式のopenを使用して親が子に書き出す)
例16-6   pipe4(fork形式のopenを使用して子が親に書き出す)
例16-7   pipe5(2つのパイプを使用して双方向通信を行なう)
例16-8   pipe6(socketpairを使用した双方向通信)
例16-9   dateplan(.planファイルに現在の日付と時刻を書き込む)
例16-10  fifolog(fifoからのログメッセージを読み出し記録する)
例16-11  sharetest(forkしたプロセス間で変数を共有するデモ)
例16-12  sigrand(ランダムなfortuneを選んで.signatureファイルに書き出す)
例17-1   clockdrift(別のシステムの時刻を実行しているシステムの時刻と比較)
例17-2   udpqotd(UDPメッセージサーバ)
例17-3   udpmsg(udpquotdサーバにメッセージを送信)
例17-4   biclient(forkを使った双方向クライアント)
例17-5   preforker(最初にforkするサーバ)
例17-6   nonforker(forkを使わずに複数のクライアントを処理するサーバ)
例17-7   backsniff(特定のポートへの接続要求のログをとる)
例17-8   fwdport(特定のサービスへの代理接続転送を行なう)
例18-1   mxhost(あるホストのmxエクスチェンジャを見つける)
例18-2   hostaddrs(ホスト名とIPアドレスの確認)
例18-3   expn(smtpにエイリアス展開処理を依頼)
例19-1   hiweb(CGIモジュールをロードしてWebサーバによって与えられた情報をデコード)
例19-2   webwhoami(だれがスクリプトを実行しているのか)
例19-3   salcheck(給与のチェック)
例19-4   oreobounce(クッキーを設定しブラウザをリダイレクト)
例19-5   os_snipe(現OSについて説明したJargonファイルの項目にリダイレクト)
例19-6   dummyhttpd(HTTPデーモンを起動しクライアントの送信内容を出力)
例19-7   ic_cookies(クッキーを使用したCGIスクリプト)
例19-8   who.cgi(あるユーザに対してwho(1)を実行し結果をきれいに出力)
例19-9   chemiserie(簡単なショッピングカートプログラム)
例20-1   titlebytes(ドキュメントのタイトルとサイズを取得)
例20-2   xurl(URLから一意なリンクを抽出しソート)
例20-3   text2html(通常のテキストをhtmlソースに変換)
例20-4   htitle(URLからHTMLのタイトルを取り出す)
例20-5   churl(URLのチェック)
例20-6   surl(URLを最終更新日付でソート)
例20-7   userrep1(SQLデータベースを使用してユーザのログイン時間をレポート(1))
例20-8   userrep2(SQLデータベースを使用してユーザのログイン時間をレポート(2))
例20-9   sumwww(Webサーバログの内容を集計)
例20-10  aprept(Apacheログのレポート作成)
例20-11  htmlsub(HTMLファイルのテキスト本文だけを対象に置換)
例20-12  hrefsub(HTMLファイルのタグ内だけを対象に置換)

Feedback

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