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

59 lines
3.1 KiB
Markdown
Raw Normal View History

2019-03-31 11:00:21 +00:00
---
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>