実用 Perlプログラミング

[cover photo]
TOPICS
発行年月日
PRINT LENGTH
512
ISBN
4-90090-082-6
原書
Advanced Perl Programming
FORMAT
Print
4,950円
この商品は品切れ再入荷未定です

クラスやパッケージの使い方、データベースの取り扱い、ネットワーキング、TkによるGUIプログラミング、他言語とのリンク、インタプリタへの埋め込み機能など、Perlに関する高度なプログラミングテクニックをもらさず解説します。Perlを単なるスクリプト言語に終わらせることなく、高度なユーティリティや実用アプリケーションの開発までのノウハウをわかりやすくまとめました。一歩先を行くPerl使いを目指す人のための書籍です。

目次

訳者まえがき
はじめに

1章 データリファレンスと無名のメモリ領域
    1.1 既存の変数を参照する
        1.1.1 リファレンスはスカラーの一種
        1.1.2 デリファレンス
        1.1.3 スカラーへのリファレンス
        1.1.4 配列へのリファレンス
        1.1.5 ハッシュへのリファレンス
        1.1.6 優先順位の混乱
        1.1.7 矢印記法
        1.1.8 デリファレンスは自動的には行われない
    1.2 リファレンスの使い方
        1.2.1 サブルーチンに配列やハッシュを渡す
        1.2.2 パフォーマンスの効率
        1.2.3 無名のメモリ領域へのリファレンス
        1.2.4 多段階の間接参照をデリファレンスする
        1.2.5 より一般的なルール
    1.3 多重データ構造
        1.3.1 複雑な構造を暗黙のうちに生成する
        1.3.2 添え字間の矢印を省略する
    1.4 参照先データの型を調べる
    1.5 シンボリックリファレンス
    1.6 メモリ管理の内部実装
        1.6.1 参照カウンタ
        1.6.2 配列へのリファレンスと配列要素へのリファレンス
    1.7 他の言語におけるリファレンス相当の機能
        1.7.1 Tcl
        1.7.2 Python
        1.7.3 C/C++
        1.7.4 Java
    1.8 参考文献

2章 複雑なデータ構造を実装する
    2.1 ユーザ定義のデータ構造
    2.2 例題:マトリクス
        2.2.1 「ハッシュからなるハッシュ」による方法
        2.2.2 その他の方法によるマトリクスの表現
    2.3 教授、学生、講義
        2.3.1 データ表現
    2.4 受賞者は誰だ
        2.4.1 データ表現
        2.4.2 指定された年代のエントリをすべて表示する
        2.4.3 すべてのエントリを年代順に表示する
        2.4.4 指定された年代と分野に一致するエントリを表示する
    2.5 データ構造の整形表示
    2.6 参考文献

3章 型グロブとシンボルテーブル
    3.1 Perlの変数、シンボルテーブル、スコープ
        3.1.1 レキシカル変数
        3.1.2 レキシカルスコープ vs 動的スコープ
    3.2 型グロブ
        3.2.1 一時的な別名定義
        3.2.2 型グロブによる別名を活用する
        3.2.3 別名定義のはらむ危険:変数の自殺
    3.3 型グロブとリファレンス
        3.3.1 選択的別名定義
        3.3.2 定数
        3.3.3 無名のサブルーチンに名前を付ける
        3.3.4 型グロブへのリファレンス
    3.4 ファイルハンドル、ディレクトリハンドル、フォーマット
        3.4.1 I/Oのリダイレクション
        3.4.2 ファイルハンドルをサブルーチンに渡す
        3.4.3 ファイルハンドルを局所化する
        3.4.4 文字列とハンドル

4章 サブルーチンリファレンスとクロージャ
    4.1 サブルーチンリファレンス
        4.1.1 リファレンスと名前付きサブルーチン
        4.1.2 無名のサブルーチンへのリファレンス
        4.1.3 サブルーチンリファレンスをデリファレンスする
        4.1.4 シンボリックリファレンス
    4.2 サブルーチンリファレンスの使い方
        4.2.1 ディスパッチテーブル
        4.2.2 シグナルハンドラ
        4.2.3 数式のプロット
    4.3 クロージャ
        4.3.1 クロージャの舞台裏
    4.4 クロージャの使い方
        4.4.1 クロージャを「賢いコールバック」として使用する
        4.4.2 イテレータとストリーム
        4.4.3 クロージャ vs オブジェクト
    4.5 他の言語との比較
        4.5.1 Tcl
        4.5.2 Python
        4.5.3 C++
        4.5.4 Java
    4.6 参考文献

5章 eval
    5.1 文字列形式:実行時コード評価
    5.2 ブロック形式:例外処理
        5.2.1 標準モジュール
    5.3 引用符にご用心
    5.4 evalによる式の評価
        5.4.1 置換における式の評価
    5.5 evalによる実行効率の向上
        5.5.1 複数パターンのgrepを高速化する
        5.5.2 ファイルの各行から指定の桁位置を抽出する
    5.6 evalによるタイムアウト処理
    5.7 他の言語におけるeval相当の機能
        5.7.1 Tcl
        5.7.2 Python
        5.7.3 C/C++
        5.7.4 Java
    5.8 参考文献

6章 モジュール
    6.1 パッケージとは
        6.1.1 パッケージと変数
        6.1.2 シンボリックリファレンス
    6.2 パッケージとファイル
        6.2.1 ロードパス
    6.3 パッケージの初期化と破棄
    6.4 プライバシー
        6.4.1 強制力のあるプライバシーを実現する
    6.5 シンボルをインポートする
        6.5.1 useとExporterの働き
    6.6 パッケージの入れ子
    6.7 自動ロード
    6.8 シンボルテーブルにアクセスする
    6.9 他の言語との比較
        6.9.1 Tcl
        6.9.2 Python
        6.9.3 C/C++
        6.9.4 Java

7章 オブジェクト指向プログラミング
    7.1 オブジェクト指向への招待
    7.2 Perlにおけるオブジェクト
        7.2.1 属性
        7.2.2 ユニークな識別情報
        7.2.3 ふるまい
        7.2.4 ポリモーフィズムの必要性
        7.2.5 クラスメソッドとクラス属性
        7.2.6 継承の必要性
        7.2.7 オブジェクトの破棄
        7.2.8 属性アクセスメソッド
    7.3 UNIVERSAL
        7.3.1 メソッドを探索する
    7.4 スタイルの要約
    7.5 例題:パソコンショップ
    7.6 他のオブジェクト指向言語との比較
        7.6.1 Tcl
        7.6.2 Python
        7.6.3 C++およびJava
    7.7 参考文献

8章 オブジェクト指向:次のステップ
    8.1 効率的な属性格納方法
        8.1.1 ObjectTemplate:配列を使った属性格納メカニズム
        8.1.2 型グロブを用いた属性格納メカニズム
    8.2 デリゲーション
    8.3 継承について
        8.3.1 属性の継承
        8.3.2 実装の継承
        8.3.3 インタフェースの継承
        8.3.4 継承の代わりに合成を使う
    8.4 参考文献

9章 tie
    9.1 スカラーにtieを使用する
        9.1.1 例題:ストップウォッチ
    9.2 配列にtieを使用する
        9.2.1 TIEARRAYの例:ファイルを配列のように扱う
    9.3 ハッシュにtieを使用する
    9.4 ファイルハンドルにtieを使用する
    9.5 例題:変数を監視する
    9.6 他の言語との比較
        9.6.1 Tcl
        9.6.2 Python
        9.6.3 C++
        9.6.4 Java

10章 データの永続化
    10.1 永続化の課題
    10.2 ストリームデータ
        10.2.1 FreezeThaw
        10.2.2 Data::Dumper
        10.2.3 Storable
    10.3 レコード型アプローチ
        10.3.1 DBM
        10.3.2 MLDBM
        10.3.3 Berkeley DB
    10.4 リレーショナルデータベース
        10.4.1 DBI(Database Interface)
        10.4.2 Win32::ODBC
    10.5 参考文献

11章 永続オブジェクトの実装
    11.1 Adaptorの概要
    11.2 設計の留意点
        11.2.1 設計上の目標
        11.2.2 オブジェクトのカプセル化
        11.2.3 オブジェクトとAdaptor間のプロトコル
        11.2.4 複数の値を持つ属性とデータベースとの対応付け
        11.2.5 継承とデータベースの割り付け
        11.2.6 オブジェクトの同一性
        11.2.7 オブジェクトの関連付け
        11.2.8 メモリ上のオブジェクトの同一性
        11.2.9 クエリ
        11.2.10 スキーマの進化
    11.3 実装
        11.3.1 Adaptor::File
        11.3.2 Adaptor::DBI
    11.4 参考文献

12章 ソケットによるネットワーク
    12.1 ネットワーク入門
    12.2 ソケットAPIとIO::Socket
        12.2.1 受信用プログラム
        12.2.2 送信用プログラム
        12.2.3 双方向通信
    12.3 複数のクライアントに対応する
        12.3.1 マルチスレッド
        12.3.2 selectを用いて入出力を多重化する
        12.3.3 ファイルハンドルのブロッキングを禁止する
    12.4 実用システムのサーバ
    12.5 IOオブジェクトとファイルハンドル
    12.6 既製のクライアントモジュール
        12.6.1 Net::FTP
        12.6.2 Net::POP3
    12.7 参考文献

13章 ネットワーク:RPCを実装する
    13.1 Msg:メッセージングツールキット
        13.1.1 Msgの実装
    13.2 リモートプロシージャ呼び出し(RPC)
        13.2.1 RPCモジュールを使用する
        13.2.2 RPC:実装
    13.3 参考文献

14章 Tkによるユーザインタフェース
    14.1 GUI、Tk、Perl/Tkへの招待
    14.2 Perl/Tk入門
        14.2.1 GUIフォーム:お手軽コース
    14.3 ウィジェットツアー
        14.3.1 ウィジェットプロパティ
        14.3.2 ラベルとボタン
        14.3.3 ラジオボタン、チェックボタン
        14.3.4 キャンバス
        14.3.5 テキストとエントリ
        14.3.6 リストボックス
        14.3.7 フレーム
        14.3.8 メニュー
        14.3.9 スクロールの実現とスクロールバー
        14.3.10 スケール
        14.3.11 階層化リスト
    14.4 ジオメトリ管理
        14.4.1 パッカー
        14.4.2 グリッド
    14.5 タイマー
    14.6 イベントバインディング
        14.6.1 マルチバインディング
        14.6.2 イベントの詳細情報
    14.7 イベントループ
    14.8 参考文献

15章 GUIの例:テトリス
    15.1 テトリスについて
    15.2 設計
        15.2.1 ユーザインタフェース
        15.2.2 データ構造
    15.3 実装

16章 GUIの例:マニュアルページビューア
    16.1 manとperlman
    16.2 実装
        16.2.1 マニュアルページを表示する
        16.2.2 テキストを検索する
        16.2.3 画面レイアウト
    16.3 参考文献

17章 テンプレートによるコード生成
    17.1 コード生成について
    17.2 Jeevesの使用例
        17.2.1 悪いね、ついでにこれも頼むよ!
    17.3 Jeevesの概要
        17.3.1 このアーキテクチャの利点
        17.3.2 中間Perlコード
    17.4 Jeevesの実装
        17.4.1 ASTモジュール
        17.4.2 テンプレートパーサ
        17.4.3 Jeevesドライバ
    17.5 仕様記述パーサのサンプル
    17.6 参考文献

18章 Perlを拡張する:最初のコース
    18.1 拡張機能の開発:作業のあらまし
        18.1.1 機能拡張の手順
        18.1.2 SWIGか、XSか
    18.2 例題:Perlでフラクタル図形を描く
        18.2.1 SWIGによるFractal
        18.2.2 XSによるFractal
    18.3 SWIGの機能
    18.4 XSの機能
        18.4.1 xsubppの働き
        18.4.2 省略可能パラメータとデフォルト値
        18.4.3 パラメータ値の変更
        18.4.4 特殊なコード
        18.4.5 C++コード
    18.5 自由度
    18.6 フラクタルな寄り道
    18.7 参考文献

19章 CプログラムにPerlを組み込む
    19.1 組み込みPerlの用途
    19.2 組み込みの概要
    19.3 例題:Perlの組み込み
    19.4 拡張機能を追加する
    19.5 参考文献

20章 Perlの内部構造
    20.1 ソースを読み解く
    20.2 アーキテクチャ
        20.2.1 Perlオブジェクト
        20.2.2 トランスレータ
        20.2.3 エグゼキュータ
    20.3 Perlデータ型の構造
        20.3.1 スカラー型
        20.3.2 配列型(AV)
        20.3.3 ハッシュ型(HV)
        20.3.4 グロブ型とシンボルテーブル
        20.3.5 コード型(CV)
        20.3.6 magic変数
    20.4 スタックとメッセージングプロトコル
        20.4.1 Perlサブルーチンを呼び出す
        20.4.2 呼び出される側:外部サブルーチンを自力でコーディングする
        20.4.3 その他のスタックの内部構造
    20.5 強力な機能拡張
        20.5.1 XS機能拡張の解剖
        20.5.2 XSの型マップ:概要
        20.5.3 XSの型マップを用いたオブジェクトインタフェース
        20.5.4 XSの型マップをより汎用化する
        20.5.5 C++オブジェクトとXSの型マップ
        20.5.6 XSによるメモリ管理
        20.5.7 SWIGの型マップ
    20.6 簡単組み込みAPIの実装
    20.7 将来への展望
    20.8 参考文献

付録A Tkウィジェットリファレンス
    A.1 Button――ボタン
        A.1.1 Radiobutton――ラジオボタン
        A.1.2 Checkbutton――チェックボタン
    A.2 Canvas――キャンバス
        A.2.1 Text――テキストウィジェット
    A.3 Entry――エントリウィジェット
    A.4 Listbox――リストボックス
    A.5 Menuなど――メニュー関連
    A.6 Scrollbar――スクロールバーとスクロール可能ウィジェット
    A.7 Scale――スケール
    A.8 HList――階層化リスト

付録B Perl文法の要約
    B.1 リファレンス
    B.2 複雑なデータ構造
    B.3 クロージャ
    B.4 モジュール
    B.5 オブジェクト
    B.6 動的なふるまい
    B.7 例外処理
    B.8 メタ情報
    B.9 型グロブ
    B.10 ファイルハンドル、フォーマット
索引