--- title: リダイレクトを処理する author: kazu634 date: 2009-03-14 wordtwit_post_info: - 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:4525;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}' categories: - Perl ---

背景

Perlのスクリプトでリダイレクトを処理する方法を調べてみました。元々、Emacsで選択したリージョンを標準入力として渡すshell-command-on-reginというのがあって、これを使うと一時的にファイルに保存してシェルからスクリプトを起動するという順番を踏まなくても良くなります。こいつを使ったものの例としてはperltidyの呼び出しがあります*1:


D

perltidyはperlのコードを整形するためにあって、今回の例ではバッファー全体を選択して標準入力としてperltidyに渡しています。Emacs Lispのコードはこんな感じです:

(defun perltidy ()
"Run perltidy on the current buffer."
(interactive)
(shell-command-on-region (point-min) (point-max) "perltidy -q" nil t))

こういうようにリージョンを選択して、標準入力としてそのリージョンを渡して処理できるperlスクリプトを作りたくて、実施する方法を調べました。

標準入力を受け取る

標準入力を受け取る方法はこのようになっていました:

while (<>) {
# Do something
}

*1:ターミナル上なら「perltidy -q < temp.pl」みたいなコマンドを実行していることになります