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

59 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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
---
<div class="section">
<h4>
背景
</h4>
<p>
Perlのスクリプトでリダイレクトを処理する方法を調べてみました。元々、Emacsで選択したリージョンを標準入力として渡すshell-command-on-reginというのがあって、これを使うと一時的にファイルに保存してシェルからスクリプトを起動するという順番を踏まなくても良くなります。こいつを使ったものの例としてはperltidyの呼び出しがあります<span class="footnote"><a href="/sirocco634/#f1" name="fn1" title="ターミナル上なら「perltidy -q &#60; temp.pl」みたいなコマンドを実行していることになります">*1</a></span>:
</p>
<p>
<br /> <a href="http://d.hatena.ne.jp/video/youtube/kHK745Cry3o" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/video/youtube/kHK745Cry3o', '');" alt="この動画を含む日記"><img src="http://d.hatena.ne.jp/images/d_entry.gif" alt="D" border="0" style="vertical-align: bottom;" title="この動画を含む日記" /></a>
</p>
<p>
perltidyはperlのコードを整形するためにあって、今回の例ではバッファー全体を選択して標準入力としてperltidyに渡しています。Emacs Lispのコードはこんな感じです:
</p>
<pre class="syntax-highlight">
<span class="synSpecial">(</span><span class="synStatement">defun</span> perltidy <span class="synSpecial">()</span>
<span class="synConstant">&#34;Run perltidy on the current buffer.&#34;</span>
<span class="synSpecial">(</span>interactive<span class="synSpecial">)</span>
<span class="synSpecial">(</span>shell-command-on-region <span class="synSpecial">(</span>point-min<span class="synSpecial">)</span> <span class="synSpecial">(</span>point-max<span class="synSpecial">)</span> <span class="synConstant">&#34;perltidy -q&#34;</span> <span class="synStatement">nil</span> <span class="synStatement">t</span><span class="synSpecial">))</span>
</pre>
<p>
こういうようにリージョンを選択して、標準入力としてそのリージョンを渡して処理できるperlスクリプトを作りたくて、実施する方法を調べました。
</p>
<h4>
標準入力を受け取る
</h4>
<p>
標準入力を受け取る方法はこのようになっていました:
</p>
<pre class="syntax-highlight">
<span class="synStatement">while</span> (&#60;&#62;) {
<span class="synComment"># Do something</span>
}
</pre>
</div>
<div class="footnote">
<p class="footnote">
<a href="/sirocco634/#fn1" name="f1">*1</a>ターミナル上なら「perltidy -q < temp.plみたいなコマンドを実行していることになります
</p>
</div>