私の使っている Perl Scripts

Last Updated at $Date: 2011-11-15 07:32:53 $.

このページで紹介しているスクリプトは,無保証です. また,配布条件は GNU General Public License の適当なバージョンに従うものとします.

スクリプト中の漢字コードは原則的に EUC コードで記述されています.


BibTeX データベースから業績一覧のウェブページを生成するスクリプト

BibTeX データベースから業績一覧のウェブページを生成する非常に簡単なスクリプトです.データに応じて条件分岐させたりする改造を行って使うことを想定しています.多機能なツールが欲しい人は,bibtex2htmlbib2html を試して下さい.

(2009年11月14日)


ファイルの変更を監視するスクリプト

指定されたファイルが変更されたときに,指定されたコマンドを実行するスクリプトです.

子プロセスが dead process になって大量に残ってしまうバグを修正しました. (2002年11月30日)


Mailman の司会を補助するスクリプト

Mailman で運用しているメーリングリストに,非登録ユーザからメールが送られてくると, 司会者に「このメールを承認しても良いか?」と司会を依頼するメールが飛んできます. このスクリプトは,その依頼メールを clamavbsfilter で解析して,明らかに virus または spam であるようなメールは自動的に破棄(= Mailman に破棄コマンドメールを送信)し, 判断できないメールだけを司会者に転送します.


余分なファイルを削除するスクリプト

Emacs / Mule の生成するバックアップファイルや, TeX の作業ファイルなどの余分なファイルを削除するためのスクリプトです.


ログファイルを更新するスクリプト

syslog などの生成するログファイルを定期的に更新するための,ありがちなスクリプトです.


PPP の接続記録を集計するスクリプト

syslog を通して蓄積されている pppd の接続記録を集計し, 通話時間・料金を計算するスクリプトです.


ondemand 接続を行う PPP リンク上で安全に接続するスクリプト

pppddemand オプションを指定して, ondemand 接続を行うように設定している場合,ppp インタフェースの IP アドレスは起動時に設定済みです. そのため,ISP によって動的に IP アドレスが割り当てられると, PPP 接続の確立時にインターフェースの IP アドレスが変化し, 既存の接続が破壊されることがあります. safeconnect.perl は,そのような状況下で安全に接続を開始するための connect のラッパースクリプトです.


NIS+ にユーザーを登録するスクリプト

NIS+ には,ユーザーを登録するためのコマンドがありません.そこで,個別に nistbladm を実行して,ユーザーを登録することになるのですが,これが結構面倒です.てわけで,標準の useradd と同じように使えるようにした Perl スクリプトを書きました. オプションを解析して,nistbladm に渡しているだけなんですけどね.


非同期に実行される子プロセスを生成するモジュール

Fork.pm は,指定されたコマンドを子プロセスとして,親プロセスとは非同期に実行させるためのモジュールです. 子プロセスの標準入力への書き込みと,標準出力及び標準エラー出力からの読み出しを行うメソッドも提供します. つまり,標準モジュールの Open2.pm と非常に良く似た機能を提供するモジュールです.

Open2.pm と比べたときの Fork.pm の利点は,

  1. 実装が簡潔である.
  2. 入出力のファイルハンドルについて混乱することがない.
  3. 子プロセスの標準入力に入力するときに明示的にパイプを flush している.
  4. タイムアウトつきの読み出しを行う.

などがあります.

IO::Handle などと同じように使えるようにするため,printf / getline / timeout メソッドを追加. read / write メソッドを廃止.(1999年5月23日)

geline メソッドによって読み出し中にタイムアウトが発生した場合に,子プロセスを強制終了しないように変更した. (1999年6月4日)


2つのディレクトリ間のファイルの同期を取るスクリプト

概要説明

syncdir.perl は,異なるホストの間でファイルの同期を取る perl スクリプトです.

rdist や rsync は,ディレクトリ単位でファイルの同期を取る場合には, とても便利です.しかし,rdist の場合,ディレクトリツリー内に, コピーしたいファイルとコピーしたくないファイルが混在している場合, ファイルの指定が複雑になります.rsync も同様な欠点を持っています.

似たようなことを考える人は大変多いようで….syncdir という名前のC言語のプログラムを見つけました.(1999年5月22日)

rsync で,--include オプションが利用できるようになったため,rsync と比較した場合のメリットが殆んどなくなってしまいました. よって,開発を終了しました.(1999年1月3日)

syncdir.perl は,正規表現によるファイル指定を受け付けますので, 柔軟なファイル指定が可能です.例えば,ホスト A のディレクトリ src から,ローカルホストのディレクトリ src にファイルを転送する場合,次のような指定が可能です.

syncdir.perl -i \.[ch]$ -i Makefile -x ^backup/ A:src src

この指定では,Makefile とソースファイルのみを転送しますが, src/backup/ 以下のソースファイルは転送しません.

私自身は,下宿と大学のコンピューターのソースコードの同期を取るために使っています.

ダウンロード

更新履歴

バージョン 0.5beta (1998年9月12日4時)

転送先のファイルを上書きする場合,ファイル名の末尾に ~ を付け加えたバックアップファイルを作ってから,転送するように変更しました. 転送が成功した場合は,バックアップファイルは自動的に消去されます. また,バックアップファイルと同じ名前のファイルがあった場合は消去されてしまいます. なお,バックアップファイル名を生成するための接尾辞を変更したい場合は, スクリプト中の $SUFFIX を変更して下さい.

バージョン 0.4beta (1998年5月24日17時)

--delete オプションが正常に動作していなかったバグを修正しました.

バージョン 0.3beta (1998年5月8日17時)

細かい修正を加えました.このバージョンから --version というバージョン表示のオプションを受け付けますので, 最新版か確認したい方は使って下さい.

Message-ID: <6iuhkc$eeb$1@kuee4.kuee.kyoto-u.ac.jp>
の記事に添付したスクリプトは,このバージョンのものです.

さらにバグが見つかりました (1998年5月8日12時)

意図しないディレクトリをコピーする可能性のあるバグを修正しました.

--include オプションに関するバグの修正 (1998年5月7日)

--include オプションを指定しないと, ファイルが転送されないバグを修正しました.

Message-ID: <6iradb$m5j$3@kuee4.kuee.kyoto-u.ac.jp>
の記事に添付したスクリプトはこの段階のものです.

Initial Release (1998年5月7日)

Message-ID: <6iq5hg$prt$1@ginger.media.kyoto-u.ac.jp>
の記事に添付したスクリプトはこの段階のものです.


html ファイルに index を付加するスクリプト

ファイルの先頭の index と実際の内容の間の同期を取るのは結構面倒くさい仕 事です.そこで,ファイル中の <a name="hogehoge">というタグを検索し, 自動的に index を作成してくれるスクリプトを書いてみました. このページの先頭の index は,このスクリプトを用いて生成されています.

現在は,同じことを Emacs Lisp のコマンド を使って行なっています. 従って,この Perl スクリプトは今後変更されることは有りません. (1998年1月14日)

引数なしでスクリプトを実行すると,簡単な利用法を表示します.

日本語変換のモジュールを組み込んでいませんので,妙な動作をする可能性があ ります.<a name="hogehoge"> のタグは改行を含まずに1行で書く必要があり ます.


[Top] / [私の使っている Perl Scripts]