クラスやパッケージの使い方、データベースの取り扱い、ネットワーキング、TkによるGUIプログラミング、他言語とのリンク、インタプリタへの埋め込み機能など、Perlに関する高度なプログラミングテクニックをもらさず解説します。Perlを単なるスクリプト言語に終わらせることなく、高度なユーティリティや実用アプリケーションの開発までのノウハウをわかりやすくまとめました。一歩先を行くPerl使いを目指す人のための書籍です。
実用 Perlプログラミング
Sriram Srinivasan 著、須田 隆久 訳
- TOPICS
- 発行年月日
- 1998年11月
- PRINT LENGTH
- 512
- ISBN
- 4-90090-082-6
- 原書
- Advanced Perl Programming
- FORMAT
目次
訳者まえがき はじめに 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 ファイルハンドル、フォーマット 索引