本書は、Perlをより深く知りそして活用するためのアイデアと、Perlによる実践的なプログラミングテクニックをふんだんに盛り込んだレシピ集です(全2冊)。VOLUME 1には、Perlの基本データ型、パターンマッチ、ファイルシステムなど基本的な処理のほか、プログラムをフレキシブルで強力にするために欠かせないリファレンス、モジュール、オブジェクトなどに関するレシピを収録。VOLUME 2には、データベースアクセスやユーザインタフェース、ネットワークプログラミング、インターネットサービス、Webアプリケーション関連のレシピを収録。また、mod_perlとXMLに関する章を新しく設けています。Perlプログラマが直面するプログミングの課題を幅広く取りあげ、そのすべてに実践的な解法を示しています。すべてのPerlプログラマへ本書を捧げます。
Perlクックブック 第2版 VOLUME 2
Tom Christiansen, Nathan Torkington 著、Shibuya Perl Mongers 監訳、株式会社ドキュメントシステム 訳
![[cover photo]](https://www.oreilly.co.jp/books/images/picture_large4-87311-203-6.jpeg)
- TOPICS
- クックブック , Programming , Perl
- 発行年月日
- 2004年09月
- PRINT LENGTH
- 464
- ISBN
- 4-87311-203-6
- 原書
- Perl Cookbook, 2nd Edition
- FORMAT
目次
VOLUME 1 目次 はじめに 序文 1章 文字列 概要 レシピ1.1 部分文字列を抽出する レシピ1.2 デフォルト値を設定する レシピ1.3 一時変数を使用しないで変数の値を交換する レシピ1.4 文字から数値コードへ変換する レシピ1.5 Unicodeの名前付き文字を使用する レシピ1.6 文字列を1文字ずつ処理する レシピ1.7 文字列を単語または文字単位で逆順にする レシピ1.8 Unicode合成文字を1つの文字として扱う レシピ1.9 Unicode合成文字が含まれている文字列を正規化する レシピ1.10 Unicode文字列をオクテット単位で扱う レシピ1.11 タブをスペースに、スペースをタブに変換する レシピ1.12 ユーザ入力した変数を展開する レシピ1.13 大文字/小文字の変換をする レシピ1.14 タイトルまたは見出しを適切にキャピタライズしたい レシピ1.15 文字列内の関数や式を展開する レシピ1.16 ヒアドキュメントをインデントする レシピ1.17 段落を整形する レシピ1.18 文字をエスケープする レシピ1.19 文字列の先頭または末尾の空白を削除する レシピ1.20 カンマで区切られたデータ(CSV)を解析する レシピ1.21 定数を宣言する レシピ1.22 Soundexマッチング レシピ1.23 プログラム:fixstyle レシピ1.24 プログラム:psgrep 2章 数値 概要 レシピ2.1 文字列が有効な数値であるかどうかチェックする レシピ2.2 浮動小数点数を丸める レシピ2.3 浮動小数点数を比較する レシピ2.4 連続した整数を操作する レシピ2.5 ローマ数字を取り扱う レシピ2.6 乱数を生成する レシピ2.7 再現性のある乱数を生成する レシピ2.8 乱数をさらにランダムにする レシピ2.9 偏りのある乱数を生成する レシピ2.10 三角法をラジアンではなく度で計算する レシピ2.11 三角関数を計算する レシピ2.12 対数を取る レシピ2.13 行列の積を計算する レシピ2.14 複素数を使用する レシピ2.15 2進数、8進数、16進数を10進数に変換する レシピ2.16 数値に位取りのカンマを挿入する レシピ2.17 正しい複数形を出力する レシピ2.18 プログラム:素因数分解 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.11 プログラム: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.18 配列の要素をランダムに並べ替える レシピ4.19 プログラム:words レシピ4.20 プログラム:permute 5章 ハッシュ 概要 レシピ5.1 ハッシュに要素を追加する レシピ5.2 ハッシュ内に特定のキーがあるかどうか検証する レシピ5.3 不変キーまたは不変値を持つハッシュを作成する レシピ5.4 ハッシュからエントリを削除する レシピ5.5 ハッシュの各エントリを処理する レシピ5.6 ハッシュを出力する レシピ5.7 ハッシュの要素を追加順で取り出す レシピ5.8 1つのキーに複数の値を関連付ける レシピ5.9 ハッシュのキーと値を入れ替える レシピ5.10 ハッシュをソートする レシピ5.11 ハッシュを結合する レシピ5.12 2つのハッシュから共通/非共通のキーを見つける レシピ5.13 ハッシュのリファレンス レシピ5.14 ハッシュのサイズを事前に設定しておく レシピ5.15 同じ要素の個数を数える レシピ5.16 データ間の関係を表現する レシピ5.17 プログラム:dutree 6章 パターンマッチ 概要 レシピ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 ネストされている文字列に対してマッチングを行う レシピ6.18 1つのパターンでAND、OR、NOTを表現する レシピ6.19 有効なメールアドレスにマッチするパターン レシピ6.20 略語にマッチするパターン レシピ6.21 プログラム:urlify レシピ6.22 プログラム:tcgrep レシピ6.23 正規表現集 7章 ファイルアクセス 概要 レシピ7.1 ファイルをオープンする レシピ7.2 特殊な名前のファイルをオープンする レシピ7.3 ファイル名の中のチルダを展開する レシピ7.4 エラーメッセージ内にファイル名を含める レシピ7.5 ファイルハンドルを変数に格納する レシピ7.6 ファイルハンドルを引数として受け取る関数を書く レシピ7.7 書き込みモードでオープンしたファイルハンドルをキャッシュする レシピ7.8 複数のファイルハンドルに同時に出力する レシピ7.9 数値形式のファイル記述子をオープン、クローズする レシピ7.10 ファイルハンドルをコピーする レシピ7.11 一時ファイルを作成する レシピ7.12 プログラム内にファイルを埋め込む レシピ7.13 複数のファイルをDATAエリア内に埋め込む レシピ7.14 Unixスタイルのフィルタプログラムを書く レシピ7.15 一時ファイルを使用してファイルをその場で修正する レシピ7.16 -iオプションを使用してファイルをその場で修正する レシピ7.17 一時ファイルを使用しないでファイルをその場で修正する レシピ7.18 ファイルをロックする レシピ7.19 出力をフラッシュする レシピ7.20 非ブロックモードで入出力を行う レシピ7.21 読み取り可能なバイト数を取得する レシピ7.22 ブロックせずに多くのファイルハンドルから読み取りを行う レシピ7.23 ブロックせずに行全体を読み取る レシピ7.24 プログラム:netlock レシピ7.25 プログラム: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 バイナリファイルにランダムにアクセスする レシピ8.13 ランダムアクセスファイルを更新する レシピ8.14 バイナリファイルから文字列を読み込む レシピ8.15 固定長レコードを読み込む レシピ8.16 設定ファイルを読み込む レシピ8.17 ファイルの信頼性をテストする レシピ8.18 ファイルを配列として扱う レシピ8.19 デフォルトの入出力レイヤを設定する レシピ8.20 ファイルハンドルに対してUnicodeを読み書きする レシピ8.21 MicrosoftのテキストファイルをUnicodeに変換する レシピ8.22 2つのファイルの内容を比較する レシピ8.23 文字列をファイルとして扱う レシピ8.24 プログラム:tailwtmp レシピ8.25 プログラム:tctee レシピ8.26 プログラム:laston レシピ8.27 プログラム:Flat File Indexes 9章 ディレクトリ 概要 レシピ9.1 タイムスタンプを取得、設定する レシピ9.2 ファイルを削除する レシピ9.3 ファイルをコピーもしくは移動する レシピ9.4 同じファイルに2つの名前が与えられていないか確認する レシピ9.5 ディレクトリ内のすべてのファイルを処理する レシピ9.6 パターンにマッチするファイル名のリストを取得する レシピ9.7 ディレクトリ内のすべてのファイルを再帰的に処理する レシピ9.8 ディレクトリとその中身を削除する レシピ9.9 ファイル名を変更する レシピ9.10 ファイル名を構成要素に分解する レシピ9.11 8進数ではなく記号でパーミッションを操作する レシピ9.12 プログラム:symirror レシピ9.13 プログラム:lst 10章 サブルーチン 概要 レシピ10.1 サブルーチンの引数にアクセスする レシピ10.2 関数内に局所変数を作成する レシピ10.3 値を保持する局所変数を作成する レシピ10.4 現在実行されている関数の名前を取得する レシピ10.5 配列、ハッシュをリファレンスで関数に渡す レシピ10.6 戻り値のコンテキストを取得する レシピ10.7 名前付きの引数を渡す レシピ10.8 所要の戻り値のみを取得する レシピ10.9 複数の配列もしくはハッシュを戻り値として返す レシピ10.10 エラーを返す レシピ10.11 関数プロトタイプを宣言する レシピ10.12 例外を処理する レシピ10.13 グローバル変数の値を一時的に別の場所に保存する レシピ10.14 関数を再定義する レシピ10.15 AUTOLOADを使用して未定義の関数を捕捉する レシピ10.16 サブルーチンをネストする レシピ10.17 多分岐文を書く レシピ10.18 プログラム:メールをソートする 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.15 弱いリファレンスを使用して循環データ構造体が ガベージコレクトされるようにする レシピ11.16 プログラム:アウトライン レシピ11.17 プログラム:二分木 12章 パッケージ、ライブラリ、モジュール 概要 レシピ12.1 モジュールのインタフェースを定義する レシピ12.2 requireまたはuseのエラーを捕捉する レシピ12.3 useで処理を実行時まで遅延させる レシピ12.4 変数を局所化する レシピ12.5 関数を局所化する レシピ12.6 呼び出し側のパッケージを判定する レシピ12.7 モジュールのクリーンアップを自動化する レシピ12.8 自分専用のモジュールディレクトリを用意する レシピ12.9 モジュールを配布する レシピ12.10 SelfLoaderでモジュールのロードを高速化する レシピ12.11 Autoloaderでモジュールのロードを高速化する レシピ12.12 組み込み関数をオーバーライドする レシピ12.13 すべてのパッケージの組み込み関数をオーバーライドする レシピ12.14 組み込み関数と同様のエラーと警告を出力する レシピ12.15 警告をカスタマイズする レシピ12.16 パッケージを間接的に参照する レシピ12.17 h2phでCの#includeファイルを変換する レシピ12.18 h2xsでCコードを含むモジュールを作成する レシピ12.19 Inline::CでCの拡張モジュールを書く レシピ12.20 PODでドキュメントを作成する レシピ12.21 CPANモジュールのビルドとインストール レシピ12.22 例:モジュールのテンプレート レシピ12.23 プログラム:インストール済みのモジュールのバージョンと説明を 検索する 13章 クラス、オブジェクト、tie 概要 レシピ13.1 オブジェクトを作成する レシピ13.2 オブジェクトを破棄する レシピ13.3 インスタンスデータを管理する レシピ13.4 クラスデータを管理する レシピ13.5 構造体としてのクラスの使用方法 レシピ13.6 クローンを作成するコンストラクタ レシピ13.7 コピーコンストラクタ レシピ13.8 メソッドを間接的に呼び出す レシピ13.9 サブクラスのインスタンスを判定する レシピ13.10 継承可能なクラスを書く レシピ13.11 オーバーライドされたメソッドにアクセスする レシピ13.12 AUTOLOADで属性メソッドを生成する レシピ13.13 オブジェクトで環状データ構造に対処する レシピ13.14 演算子のオーバーロード レシピ13.15 tieでマジック変数を作成する 索引 (1) VOLUME 2 目次 14章 データベースアクセス 概要 レシピ14.1 DBMファイルを作成/使用する レシピ14.2 DBMファイルを空にする レシピ14.3 異なるDBMファイルに変換する レシピ14.4 DBMファイルをマージする レシピ14.5 大規模なDBMファイルをソートする レシピ14.6 DBMファイルに複雑なデータを保存する レシピ14.7 永続的なデータ レシピ14.8 問い合わせ結果をExcelまたはCSVへ保存する レシピ14.9 DBIを使用してSQLコマンドを実行する レシピ14.10 クォートの処理 レシピ14.11 データベースのエラーを処理する レシピ14.12 効率よくクエリを繰り返す レシピ14.13 プログラムによってクエリを生成する レシピ14.14 クエリによって返された行数を確認する レシピ14.15 トランザクションを使用する レシピ14.16 1ページ分ずつデータを表示する レシピ14.17 CSVファイルをSQLで問い合わせる レシピ14.18 データベースサーバなしでSQLを使用する レシピ14.19 プログラム:ggh(Netscapeの履歴をgrepする) 15章 対話型操作 概要 レシピ15.1 プログラムの引数を解析する レシピ15.2 プログラムが対話的に実行されているかどうか判定する レシピ15.3 画面を消去する レシピ15.4 端末またはウィンドウのサイズを判定する レシピ15.5 テキストの色を変更する レシピ15.6 キーボードから1文字を読み取る レシピ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.18 データをグラフ化する レシピ15.19 イメージの縮小版を作成する レシピ15.20 イメージにテキストを追加する レシピ15.21 プログラム:小さなtermcapプログラム レシピ15.22 プログラム:tkshufflepod レシピ15.23 プログラム:graphbox 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.22 シグナルを致命的エラーに変換する レシピ16.23 プログラム: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 分離したプロセスのソケットを閉鎖する レシピ17.10 双方向クライアントを書く レシピ17.11 forkでサーバを分離する レシピ17.12 forkでサーバを事前に分離する レシピ17.13 forkによって分離しないサーバ レシピ17.14 スレッドによるマルチタスキングサーバ レシピ17.15 POEでマルチタスクサーバを書く レシピ17.16 マルチホームサーバを書く レシピ17.17 デーモンサーバを作成する レシピ17.18 要求に基づいてサーバを再起動する レシピ17.19 複数の入力ストリームを管理する レシピ17.20 プログラム:backsniff レシピ17.21 プログラム:fwdport 18章 インターネットサービス 概要 レシピ18.1 単純なDNSを検索する レシピ18.2 FTPクライアントになる レシピ18.3 メールを送信する レシピ18.4 Usenetニュースメッセージの購読と投稿 レシピ18.5 POP3でメールを読み取る レシピ18.6 telnetをシミュレートする レシピ18.7 マシンに対してpingする レシピ18.8 LDAPサーバへアクセスする レシピ18.9 添付ファイル付きのメールを送信する レシピ18.10 メールから添付ファイルを取り出す レシピ18.11 XML-RPCサーバを書く レシピ18.12 XML-RPCクライアントを書く レシピ18.13 SOAPサーバを書く レシピ18.14 SOAPクライアントを書く レシピ18.15 プログラム:rfrm レシピ18.16 プログラム:expnとvrfy 19章 CGIプログラミング 概要 レシピ19.1 CGIスクリプトを作成する レシピ19.2 エラーメッセージをリダイレクトする レシピ19.3 500 Server Errorを修復する レシピ19.4 安全なCGIプログラムを作成する レシピ19.5 シェルエスケープしないコマンドを実行する レシピ19.6 HTMLヘルパ関数を使用したリストとテーブルの書式設定 レシピ19.7 別の場所へリダイレクトする レシピ19.8 未加工のHTTPデータをデバッグする レシピ19.9 クッキーを管理する レシピ19.10 フォームの値を使い回す レシピ19.11 マルチスクリーンのCGIスクリプトを作成する レシピ19.12 ファイルまたはメールパイプへフォームを保存する レシピ19.13 プログラム:chemiserie 20章 Webオートメーション 概要 レシピ20.1 Perlスクリプトから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.14 クッキーを使用する レシピ20.15 パスワードで保護されたページを取得する レシピ20.16 httpsで始まるWebページを取得する レシピ20.17 HTTP GETを再開(レジューム)する レシピ20.18 HTMLを解析する レシピ20.19 テーブルデータを抽出する レシピ20.20 プログラム:htmlsub レシピ20.21 プログラム:hrefsub 21章 mod_perl 概要 レシピ21.1 認証 レシピ21.2 クッキーを設定する レシピ21.3 クッキーの値にアクセスする レシピ21.4 ブラウザにリダイレクトを送る レシピ21.5 ヘッダを調べる レシピ21.6 フォームパラメータにアクセスする レシピ21.7 アップロードファイルを受信する レシピ21.8 データベースアクセスを高速化する レシピ21.9 Apacheのログ収集をカスタマイズする レシピ21.10 URLに透過的な情報を埋め込む レシピ21.11 mod_perlとPHP間で通信する レシピ21.12 CGIからmod_perlへ移行する レシピ21.13 ハンドラ間で情報を共有する レシピ21.14 変更されたモジュールを再読み込みする レシピ21.15 mod_perlアプリケーションのベンチマークを測定する レシピ21.16 HTML::Masonでテンプレートを作成する レシピ21.17 Template Toolkitでテンプレートを作成する 22章 XML 概要 レシピ22.1 XMLのデータ構造を解析する レシピ22.2 XMLをDOMツリーで解析する レシピ22.3 XMLをSAXイベントで解析する レシピ22.4 要素またはテキストへ簡単に変更する レシピ22.5 XMLを検証(validate)する レシピ22.6 XML文書内の要素とテキストを検出する レシピ22.7 XMLスタイルシートで変換する レシピ22.8 利用可能なメモリ量よりも大きなファイルを処理する レシピ22.9 RSSファイルの読み書き レシピ22.10 XMLを作成する 索引