blog/content/post/2009-03-14-00001128.md

3.2 KiB
Raw Blame History

title author date url wordtwit_post_info categories
リダイレクトを処理する kazu634 2009-03-14 /2009/03/14/_1210/
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";}}
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」みたいなコマンドを実行していることになります