<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>taichino.com &#187; ruby</title>
	<atom:link href="http://taichino.com/category/programming/ruby/feed" rel="self" type="application/rss+xml" />
	<link>http://taichino.com</link>
	<description>永遠のネバーランド</description>
	<lastBuildDate>Sat, 04 Feb 2012 13:33:04 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>1時間覚えるRubyで入門した</title>
		<link>http://taichino.com/programming/1358</link>
		<comments>http://taichino.com/programming/1358#comments</comments>
		<pubDate>Fri, 11 Dec 2009 14:58:14 +0000</pubDate>
		<dc:creator>taichino</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://taichino.com/?p=1358</guid>
		<description><![CDATA[rubyは読めた方が良いなぁと思っていたのですが、タイミングが無くてほったらかしでした。で、「1時間で覚えるRuby」という面白そうな記事を見つけたので内容を写経して見ました。結果は45分でこなせて効果もあったのでオススメです。 気付いた事を箇条書きにしておきます。 Integer型の0はTrue扱い irbがpythonで言うところのipython pythonで言うところの辞書は、perl同様ハッシュと呼ぶ メンバ変数には@を付ける クラス変数には@@を付ける to_sでtostring インクリメント演算子はない 正規表現はperlに似てる。置換はsub, gsubを使う ARGFにファイルハンドルが入ってる 知らないオブジェクトはirbのタブ補完機能で補完リストを眺めたらなんとかなる ipythonで言うところの?とか??の機能がirbで見つからない 上記エントリには記述がなかったですが、写経しながら調べた事は以下。 gemがperlで言うところのcpanコマンド。gem helpでコマンド一覧 rubyforgeがperlで言うところのcpan。でも廃止されるらしい。 組み込み型のStringとかIntegerとかでもメソッドを追加(変更？)できる もう少し慣れたら後はリファレンスでなんとかなりそうな雰囲気ではあります。とりあえず最後のワードカウントを自力で書いたら以下のようになりました。 #!/usr/bin/ruby # usage: wc_test.rb file &#160; line_num = 0 dic = &#123;&#125; for line in ARGF line_num += 1 for word in line.split&#40;/\s/&#41; if dic&#91;word&#93; dic&#91;word&#93; += 1 else dic&#91;word&#93;= 1 end end end &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>rubyは読めた方が良いなぁと思っていたのですが、タイミングが無くてほったらかしでした。で、「<a href="http://mayah.jp/article/2004/ruby">1時間で覚えるRuby</a>」という面白そうな記事を見つけたので内容を写経して見ました。結果は45分でこなせて効果もあったのでオススメです。</p>
<p><span id="more-1358"></span></p>
<p>気付いた事を箇条書きにしておきます。</p>
<ul>
<li>Integer型の0はTrue扱い</li>
<li>irbがpythonで言うところのipython</li>
<li>pythonで言うところの辞書は、perl同様ハッシュと呼ぶ</li>
<li>メンバ変数には@を付ける</li>
<li>クラス変数には@@を付ける</li>
<li>to_sでtostring</li>
<li>インクリメント演算子はない</li>
<li>正規表現はperlに似てる。置換はsub, gsubを使う</li>
<li>ARGFにファイルハンドルが入ってる</li>
<li>知らないオブジェクトはirbのタブ補完機能で補完リストを眺めたらなんとかなる</li>
<li>ipythonで言うところの?とか??の機能がirbで見つからない</li>
</ul>
<p>上記エントリには記述がなかったですが、写経しながら調べた事は以下。</p>
<ul>
<li>gemがperlで言うところのcpanコマンド。gem helpでコマンド一覧</li>
<li><a href="http://rubyforge.org/">rubyforge</a>がperlで言うところのcpan。でも廃止されるらしい。</li>
<li>組み込み型のStringとかIntegerとかでもメソッドを追加(変更？)できる</li>
</ul>
<p>もう少し慣れたら後は<a href="http://www.ruby-lang.org/ja/man/html/index.html">リファレンス</a>でなんとかなりそうな雰囲気ではあります。とりあえず最後のワードカウントを自力で書いたら以下のようになりました。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/ruby</span>
<span style="color:#008000; font-style:italic;"># usage: wc_test.rb file</span>
&nbsp;
line_num = <span style="color:#006666;">0</span>
dic = <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span>
<span style="color:#9966CC; font-weight:bold;">for</span> line <span style="color:#9966CC; font-weight:bold;">in</span> ARGF
  line_num <span style="color:#006600; font-weight:bold;">+</span>= <span style="color:#006666;">1</span>
  <span style="color:#9966CC; font-weight:bold;">for</span> word <span style="color:#9966CC; font-weight:bold;">in</span> line.<span style="color:#CC0066; font-weight:bold;">split</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">/</span>\s<span style="color:#006600; font-weight:bold;">/</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">if</span> dic<span style="color:#006600; font-weight:bold;">&#91;</span>word<span style="color:#006600; font-weight:bold;">&#93;</span>
      dic<span style="color:#006600; font-weight:bold;">&#91;</span>word<span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">+</span>= <span style="color:#006666;">1</span>
    <span style="color:#9966CC; font-weight:bold;">else</span>
      dic<span style="color:#006600; font-weight:bold;">&#91;</span>word<span style="color:#006600; font-weight:bold;">&#93;</span>= <span style="color:#006666;">1</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
total = <span style="color:#006666;">0</span>
<span style="color:#9966CC; font-weight:bold;">for</span> k, v <span style="color:#9966CC; font-weight:bold;">in</span> dic.<span style="color:#9900CC;">sort</span><span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>a,b<span style="color:#006600; font-weight:bold;">|</span> a<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> b<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#125;</span>
  total <span style="color:#006600; font-weight:bold;">+</span>= v
  <span style="color:#CC0066; font-weight:bold;">printf</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;%s : %d<span style="color:#000099;">\n</span>&quot;</span>, k, v<span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#CC0066; font-weight:bold;">printf</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;%d lines, %d kinds, %d words&quot;</span>,
       line_num, dic.<span style="color:#9900CC;">size</span>, total<span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>今のところrubyで何か書きたい訳ではなくて、幾つか読みたいソースがあるだけなので、ぼちぼち覚えて行こうと思います。</p>
<p><strong>追記</strong><br />
ついでにirbを少しだけカスタマイズしました。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ gem <span style="color: #c20cb9; font-weight: bold;">install</span> what_methods
$ gem <span style="color: #c20cb9; font-weight: bold;">install</span> wirble</pre></div></div>

<p>上記モジュールをインストールした後に~/.irbrcを編集します。これでirbのヒストリが使えたり色がでたりと便利になりました。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'rubygems'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'activesupport'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'pp'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'irb/completion'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'what_methods'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'wirble'</span>
&nbsp;
IRB.<span style="color:#9900CC;">conf</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:SAVE_HISTORY</span><span style="color:#006600; font-weight:bold;">&#93;</span>=<span style="color:#006666;">1000</span>
Wirble.<span style="color:#9900CC;">init</span>
Wirble.<span style="color:#9900CC;">colorize</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://taichino.com/programming/1358/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>rrencodeを理解した</title>
		<link>http://taichino.com/programming/1088</link>
		<comments>http://taichino.com/programming/1088#comments</comments>
		<pubDate>Mon, 12 Oct 2009 22:08:59 +0000</pubDate>
		<dc:creator>taichino</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[rrencode]]></category>

		<guid isPermaLink="false">http://taichino.com/?p=1088</guid>
		<description><![CDATA[perlの予約語について検索したら、ppencodeとrrencodeに行き着きました。こんなに愛を感じるプログラムは見た事無かったです。で、ppencodeは解説もあって割とすっと理解できたんですが、rrencodeは理解するのに時間がかかりました。一応メモ書きをば。 出来るだけ簡潔に済ませる為に&#8217;a'と１文字だけ表示させるrrencodeプログラムを見てみます。 $ ./rrencode.rb a #!/usr/bin/env ruby &#40;$,&#38;$,&#124;&#124;@_=$&#62;&#41;;$&#62;&#60; &#60;&#40;$,&#38;$,&#124;&#124;&#40;%!%!&#60;&#60;&#40;?!+?!+?!&#41;&#41;%&#40;?&#123;-?;+&#40;?&#93;-?=+?&#34;-?!)));($,&#124;$$&#38;&#38;@@_=$_);$&#62;&#60; &#60;$/ どこから手をつければ良いか途方に暮れそうになりますが、まず手始めに ?c という構文から崩してみます。これは文字からアスキーコードを取得する構文で、この部分はすべて数字に置き換えられます。?cの部分をすべて数字に直してみましょう。 #!/usr/bin/env ruby &#40;$,&#38;$,&#124;&#124;@_=$&#62;&#41;;$&#62;&#60; &#60;&#40;$,&#38;$,&#124;&#124;&#40;%!%!&#60;&#60;&#40;33+33+33&#41;&#41;%&#40;123-59+&#40;93-61+34-33&#41;&#41;&#41;;&#40;$,&#124;$$&#38;&#38;@@_=$_&#41;;$&#62;&#60; &#60;$/ まだまだ何の事か全く解りませんね。次に計算できる部分は計算して、セミコロンで改行を入れてみます。 #!/usr/bin/env ruby &#40;$,&#38;$,&#124;&#124;@_=$&#62;&#41;; $&#62;&#60; &#60;&#40;$,&#38;$,&#124;&#124;&#40;%!%!&#60;&#60;&#40;99&#41;&#41;%&#40;97&#41;&#41;; &#40;$,&#124;$$&#38;&#38;@@_=$_&#41;; $&#62;&#60; &#60;$/ 何となく希望が湧いて来ました。次に特殊変数を処理します。ここではデフォルトの場合を仮定して以下の置き換えを行っています。リファレンスを見ながらちまちま置き換えましょう。 $,はnil $/は"\n" $$はProcess.pid $>はSTDOUT また、ついでに適宜空白を入れています。 #!/usr/bin/env ruby &#40;nil &#38; nil &#124;&#124; @_=STDOUT&#41;; STDOUT&#60; &#60;&#40;nil &#38; nil &#124;&#124; &#40;%!%!&#60;&#60;&#40;99&#41;&#41;%&#40;97&#41;&#41;; &#40;nil &#124; Process.pid &#38;&#38; @@_=$_&#41;; STDOUT&#60;&#60;&#34;\n&#34; ここまで来ると何となくプログラムの意味を想像できますね。さて、ここで2行目と4行目は単に値を表しているだけで、出力に影響を与えていないので削除します。 #!/usr/bin/env ruby [...]]]></description>
			<content:encoded><![CDATA[<p>perlの予約語について検索したら、<a href="http://www.namazu.org/~takesako/diary/?date=20050831">ppencode</a>と<a href="http://mono.kmc.gr.jp/~oxy/d/?date=20050901">rrencode</a>に行き着きました。こんなに愛を感じるプログラムは見た事無かったです。で、ppencodeは解説もあって割とすっと理解できたんですが、rrencodeは理解するのに時間がかかりました。一応メモ書きをば。</p>
<p><span id="more-1088"></span></p>
<p>出来るだけ簡潔に済ませる為に&#8217;a'と１文字だけ表示させるrrencodeプログラムを見てみます。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">$ .<span style="color:#006600; font-weight:bold;">/</span>rrencode.<span style="color:#9900CC;">rb</span> a
<span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span>
<span style="color:#006600; font-weight:bold;">&#40;</span>$,<span style="color:#006600; font-weight:bold;">&amp;</span>$,<span style="color:#006600; font-weight:bold;">||</span>@_=$<span style="color:#006600; font-weight:bold;">&gt;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;$<span style="color:#006600; font-weight:bold;">&gt;&lt;</span> <span style="color:#006600; font-weight:bold;">&lt;</span><span style="color:#006600; font-weight:bold;">&#40;</span>$,<span style="color:#006600; font-weight:bold;">&amp;</span>$,<span style="color:#006600; font-weight:bold;">||</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">%</span>!<span style="color:#006600; font-weight:bold;">%</span>!<span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#006600; font-weight:bold;">&#40;</span>?!<span style="color:#006600; font-weight:bold;">+</span>?!<span style="color:#006600; font-weight:bold;">+</span>?!<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">%</span><span style="color:#006600; font-weight:bold;">&#40;</span>?<span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">-</span>?;<span style="color:#006600; font-weight:bold;">+</span><span style="color:#006600; font-weight:bold;">&#40;</span>?<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">-</span>?=<span style="color:#006600; font-weight:bold;">+</span>?<span style="color:#996600;">&quot;-?!)));($,|$$&amp;&amp;@@_=$_);$&gt;&lt; &lt;$/</span></pre></div></div>

</pre>
<p>どこから手をつければ良いか途方に暮れそうになりますが、まず手始めに ?c という構文から崩してみます。これは<a href="http://www.ruby-lang.org/ja/man/html/Ruby_A4C7BBC8A4EFA4ECA4EBB5ADB9E6A4CEB0D5CCA3.html#a.3f">文字からアスキーコードを取得する構文</a>で、この部分はすべて数字に置き換えられます。?cの部分をすべて数字に直してみましょう。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span>
<span style="color:#006600; font-weight:bold;">&#40;</span>$,<span style="color:#006600; font-weight:bold;">&amp;</span>$,<span style="color:#006600; font-weight:bold;">||</span>@_=$<span style="color:#006600; font-weight:bold;">&gt;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;$<span style="color:#006600; font-weight:bold;">&gt;&lt;</span> <span style="color:#006600; font-weight:bold;">&lt;</span><span style="color:#006600; font-weight:bold;">&#40;</span>$,<span style="color:#006600; font-weight:bold;">&amp;</span>$,<span style="color:#006600; font-weight:bold;">||</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">%</span>!<span style="color:#006600; font-weight:bold;">%</span>!<span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">33</span><span style="color:#006600; font-weight:bold;">+</span><span style="color:#006666;">33</span><span style="color:#006600; font-weight:bold;">+</span><span style="color:#006666;">33</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">%</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">123</span><span style="color:#006600; font-weight:bold;">-</span><span style="color:#006666;">59</span><span style="color:#006600; font-weight:bold;">+</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">93</span><span style="color:#006600; font-weight:bold;">-</span><span style="color:#006666;">61</span><span style="color:#006600; font-weight:bold;">+</span><span style="color:#006666;">34</span><span style="color:#006600; font-weight:bold;">-</span><span style="color:#006666;">33</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<span style="color:#006600; font-weight:bold;">&#40;</span>$,<span style="color:#006600; font-weight:bold;">|</span>$$<span style="color:#006600; font-weight:bold;">&amp;&amp;</span>@@_=$_<span style="color:#006600; font-weight:bold;">&#41;</span>;$<span style="color:#006600; font-weight:bold;">&gt;&lt;</span> <span style="color:#006600; font-weight:bold;">&lt;</span>$<span style="color:#006600; font-weight:bold;">/</span></pre></div></div>

</pre>
<p>まだまだ何の事か全く解りませんね。次に計算できる部分は計算して、セミコロンで改行を入れてみます。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span>
<span style="color:#006600; font-weight:bold;">&#40;</span>$,<span style="color:#006600; font-weight:bold;">&amp;</span>$,<span style="color:#006600; font-weight:bold;">||</span>@_=$<span style="color:#006600; font-weight:bold;">&gt;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;
$<span style="color:#006600; font-weight:bold;">&gt;&lt;</span> <span style="color:#006600; font-weight:bold;">&lt;</span><span style="color:#006600; font-weight:bold;">&#40;</span>$,<span style="color:#006600; font-weight:bold;">&amp;</span>$,<span style="color:#006600; font-weight:bold;">||</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">%</span>!<span style="color:#006600; font-weight:bold;">%</span>!<span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">99</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">%</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">97</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;
<span style="color:#006600; font-weight:bold;">&#40;</span>$,<span style="color:#006600; font-weight:bold;">|</span>$$<span style="color:#006600; font-weight:bold;">&amp;&amp;</span>@@_=$_<span style="color:#006600; font-weight:bold;">&#41;</span>;
$<span style="color:#006600; font-weight:bold;">&gt;&lt;</span> <span style="color:#006600; font-weight:bold;">&lt;</span>$<span style="color:#006600; font-weight:bold;">/</span></pre></div></div>

</pre>
<p>何となく希望が湧いて来ました。次に特殊変数を処理します。ここではデフォルトの場合を仮定して以下の置き換えを行っています。<a href="http://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFCAD1BFF4.html">リファレンス</a>を見ながらちまちま置き換えましょう。</p>
<ul>
<li><strong>$,</strong>はnil</li>
<li><strong>$/</strong>は"\n"</li>
<li><strong>$$</strong>はProcess.pid</li>
<li><strong>$></strong>はSTDOUT</li>
</ul>
<p>また、ついでに適宜空白を入れています。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span>
<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">nil</span> <span style="color:#006600; font-weight:bold;">&amp;</span> <span style="color:#0000FF; font-weight:bold;">nil</span> <span style="color:#006600; font-weight:bold;">||</span> <span style="color:#0066ff; font-weight:bold;">@_</span>=STDOUT<span style="color:#006600; font-weight:bold;">&#41;</span>;
STDOUT<span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">&lt;</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">nil</span> <span style="color:#006600; font-weight:bold;">&amp;</span> <span style="color:#0000FF; font-weight:bold;">nil</span> <span style="color:#006600; font-weight:bold;">||</span> <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">%</span>!<span style="color:#006600; font-weight:bold;">%</span>!<span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">99</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">%</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">97</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;
<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">nil</span> <span style="color:#006600; font-weight:bold;">|</span> <span style="color:#CC00FF; font-weight:bold;">Process</span>.<span style="color:#9900CC;">pid</span> <span style="color:#006600; font-weight:bold;">&amp;&amp;</span> @@_=$_<span style="color:#006600; font-weight:bold;">&#41;</span>;
STDOUT<span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#996600;">&quot;<span style="color:#000099;">\n</span>&quot;</span></pre></div></div>

</pre>
<p>ここまで来ると何となくプログラムの意味を想像できますね。さて、ここで2行目と4行目は単に値を表しているだけで、出力に影響を与えていないので削除します。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span>
STDOUT<span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">&lt;</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">nil</span> <span style="color:#006600; font-weight:bold;">&amp;</span> <span style="color:#0000FF; font-weight:bold;">nil</span> <span style="color:#006600; font-weight:bold;">||</span> <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">%</span>!<span style="color:#006600; font-weight:bold;">%</span>!<span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">99</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">%</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">97</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;
STDOUT<span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#996600;">&quot;<span style="color:#000099;">\n</span>&quot;</span></pre></div></div>

</pre>
<p>２行目をもう少し整理してみましょう。nil &#038; nilはfalseと、false || expressionはexpressionと等価である事を考えて整理します。明らかに冗長な括弧も削除しました。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span>
STDOUT<span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">&lt;</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">%</span>!<span style="color:#006600; font-weight:bold;">%</span>! <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#006666;">99</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">%</span> <span style="color:#006666;">97</span><span style="color:#006600; font-weight:bold;">&#41;</span>;
STDOUT<span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#996600;">&quot;<span style="color:#000099;">\n</span>&quot;</span></pre></div></div>

</pre>
<p>後一息です。<a href="http://www.ruby-lang.org/ja/man/html/Ruby_A4C7BBC8A4EFA4ECA4EBB5ADB9E6A4CEB0D5CCA3.html#a.25">%!文字列!はダブルクォート文字列を表している</a>ので%!%!は"%"と等しいです。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span>
STDOUT<span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">&lt;</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;%&quot;</span> <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#006666;">99</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">%</span> <span style="color:#006666;">97</span><span style="color:#006600; font-weight:bold;">&#41;</span>;
STDOUT<span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#996600;">&quot;<span style="color:#000099;">\n</span>&quot;</span></pre></div></div>

</pre>
<p>さらに、文字列に対する＜＜演算子は、<a href="http://www.ruby-lang.org/ja/man/html/String.html#self.20.3c.3c.20other">Stringクラスのconcatメソッドのエイリアス</a>なので、concatメソッドで置き換えられます。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span>
STDOUT<span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">&lt;</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;%&quot;</span>.<span style="color:#9900CC;">concat</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">99</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">%</span> <span style="color:#006666;">97</span><span style="color:#006600; font-weight:bold;">&#41;</span>;
STDOUT<span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#996600;">&quot;<span style="color:#000099;">\n</span>&quot;</span></pre></div></div>

</pre>
<p>concatメソッドは0 ~ 255の値が渡された場合はその値をアスキーコードに持つ文字を文字列に付加します。なので"%".concat(99)は99が'c'を表す事を考えると"%c"に等しくなります。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span>
STDOUT<span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">&lt;</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;%c&quot;</span> <span style="color:#006600; font-weight:bold;">%</span> <span style="color:#006666;">97</span><span style="color:#006600; font-weight:bold;">&#41;</span>;
STDOUT<span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#996600;">&quot;<span style="color:#000099;">\n</span>&quot;</span></pre></div></div>

</pre>
<p>文字列 % argsという構文はStringクラスの<a href="http://www.ruby-lang.org/ja/man/html/String.html#self.20.25.20args">sprintfメソッドのエイリアス</a>なので、sprintfで置き換えます。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span>
STDOUT<span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">&lt;</span>sprintf<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;%c&quot;</span>, <span style="color:#006666;">97</span><span style="color:#006600; font-weight:bold;">&#41;</span>;
STDOUT<span style="color:#006600; font-weight:bold;">&lt;&lt;</span><span style="color:#996600;">&quot;<span style="color:#000099;">\n</span>&quot;</span></pre></div></div>

</pre>
<p>以上で、rrenodeされたプログラムがaと出力される仕組が解りました。複数文字を出力する場合は、sprintf文を文字数分だけ呼び出すようです。なるほど。何となくperlでも出来そうですけどどうなんでしょうか。</p>
]]></content:encoded>
			<wfw:commentRss>http://taichino.com/programming/1088/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

