<?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>Serendip &#187; perl</title>
	<atom:link href="http://www.serendip.ws/archives/tag/perl/feed" rel="self" type="application/rss+xml" />
	<link>http://www.serendip.ws</link>
	<description>Webデザイン・プログラミング</description>
	<lastBuildDate>Fri, 10 Feb 2012 05:33:58 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>Python の if __name__ == &#8216;__main__&#8217;: を Perl, Ruby, PHP で行う</title>
		<link>http://www.serendip.ws/archives/4360</link>
		<comments>http://www.serendip.ws/archives/4360#comments</comments>
		<pubDate>Fri, 19 Feb 2010 13:37:02 +0000</pubDate>
		<dc:creator>iNo</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.serendip.ws/?p=4360</guid>
		<description><![CDATA[以下の Python コードの if 文の本体は、直接スクリプトとして呼び出された場合のみ実行され、ライブラリとして読み込まれた場合は実行されない。 if __name__ == '__main__': # do som [...]]]></description>
			<content:encoded><![CDATA[<p>以下の Python コードの <code>if</code> 文の本体は、直接スクリプトとして呼び出された場合のみ実行され、ライブラリとして読み込まれた場合は実行されない。</p>
<pre><span class="Statement">if</span> __name__ == '<span class="Constant">__main__</span>':
    <span class="Comment"># do something</span>
</pre>
<p>同様のコードを Perl, Ruby, PHP で書く方法を調べてみた。</p>
<h3>Perl の場合</h3>
<pre><span class="Statement">if</span> (<span class="Special">$0</span> <span class="Statement">eq</span> __FILE__) {
    <span class="Comment"># do something</span>
}
</pre>
<h3>Ruby の場合</h3>
<pre><span class="Statement">if</span> <span class="Special">$0</span> == <span class="Constant">__FILE__</span>
  <span class="Comment"># do something</span>
<span class="Statement">end</span>
</pre>
<h3>PHP の場合</h3>
<pre><span class="Statement">if</span> <span class="Special">(</span><span class="Identifier">basename</span><span class="Special">(</span><span class="Constant">__FILE__</span><span class="Special">)</span> <span class="Statement">==</span> <span class="Identifier">basename</span><span class="Special">(</span><span class="Statement">$</span><span class="Identifier">_SERVER</span><span class="Special">[</span>'<span class="Constant">PHP_SELF</span>'<span class="Special">]))</span> <span class="Special">{</span>
    <span class="Comment">// do something</span>
<span class="Special">}</span>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.serendip.ws/archives/4360/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Perl で全角空白（スペース）にマッチ</title>
		<link>http://www.serendip.ws/archives/2218</link>
		<comments>http://www.serendip.ws/archives/2218#comments</comments>
		<pubDate>Wed, 10 Jun 2009 07:17:52 +0000</pubDate>
		<dc:creator>iNo</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://www.serendip.ws/?p=2218</guid>
		<description><![CDATA[use utf8; をすると \s で全角空白（スペース）にもマッチするということでスクリプトを作っていたら、どうも上手く動作しないので調べてみると。\s で全角空白にマッチするのは UTF8 フラグが付いている文字列に [...]]]></description>
			<content:encoded><![CDATA[<p><code>use utf8;</code> をすると <code>\s</code> で全角空白（スペース）にもマッチするということでスクリプトを作っていたら、どうも上手く動作しないので調べてみると。<code>\s</code> で全角空白にマッチするのは UTF8 フラグが付いている文字列に対してらしい。<br />
外部から読み込んだファイルの文字列には <code>use utf8;</code> しても UTF8 フラグが付かないので上手く動かなかったらしい。<br />
そこで、外部から読み込んだ文字列は <code>Encode::decode_utf8</code> で UTF8 フラグを付ける。</p>
<pre><span class="PreProc">#!/usr/bin/env perl -wnl</span>
<span class="Statement">use strict</span>;
<span class="Statement">use warnings</span>;
<span class="Statement">use </span>Encode;
<span class="Statement">use utf8</span>;

<span class="Statement">my</span> <span class="Identifier">$line</span> = <span class="Identifier">$_</span>; <span class="Comment"># UTF8 フラグ無し</span>
<span class="Statement">my</span> <span class="Identifier">$str</span> = <span class="Constant">&quot;</span><span class="Constant">内部:hello world.ハロー</span><span class="JISX0208Space">　</span><span class="Constant">ワールド。</span><span class="Constant">&quot;</span>; <span class="Comment"># UTF8 フラグ有り</span>
<span class="Statement">my</span> <span class="Identifier">$line2</span> = Encode::decode_utf8(<span class="Identifier">$line</span>); <span class="Comment"># UTF8 フラグを付ける</span>

<span class="Identifier">$line</span> =~ <span class="Statement">s/</span><span class="Special">\s</span><span class="Statement">//g</span>;
<span class="Identifier">$line2</span> =~ <span class="Statement">s/</span><span class="Special">\s</span><span class="Statement">//g</span>;
<span class="Identifier">$str</span> =~ <span class="Statement">s/</span><span class="Special">\s</span><span class="Statement">//g</span>;

<span class="Statement">print</span> <span class="Identifier">$line</span>;
<span class="Statement">binmode</span> <span class="Identifier">STDOUT</span>, <span class="Constant">&quot;</span><span class="Constant">:utf8</span><span class="Constant">&quot;</span>;
<span class="Statement">print</span> <span class="Identifier">$line2</span>;
<span class="Statement">print</span> <span class="Identifier">$str</span>;
</pre>
<p>実行結果</p>
<pre>$ ./u8.pl hoge.txt
外部:helloworld.ハロー<span class="JISX0208Space">　</span>ワールド。
外部:helloworld.ハローワールド。
内部:helloworld.ハローワールド。
</pre>
<p>hoge.txt の中身</p>
<pre>外部:hello world.ハロー　ワールド。
</pre>
<p>内部文字列では UTF8 フラグが付いているために全角空白も <code>\s</code> でマッチしている。</p>
<p>参考：<a href="http://www.rwds.net/kuroita/program/Perl_unicode.html#flg" class="out">Perl 5.8.x Unicode関連</a></p>
<div class="amazlet-box" style="margin-bottom:0px;font-size:7pt;">
<div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113687/serendip7822-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/415NIum-vpL._SL160_.jpg" alt="ミニマルPerl Unix/LinuxユーザのためのPerl習得法" style="border: none;" /></a></div>
<div class="amazlet-info" style="float:left;margin-top:10px;margin-left:15px;line-height:120%">
<div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113687/serendip7822-22/ref=nosim/" name="amazletlink" target="_blank">ミニマルPerl Unix/LinuxユーザのためのPerl習得法</a>
<div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4873113687/serendip7822-22/ref=nosim/" title="ミニマルPerl Unix/LinuxユーザのためのPerl習得法" target="_blank">amazlet</a> at 09.06.05</div>
</div>
<div class="amazlet-detail">Tim Maher <br />オライリージャパン <br />売り上げランキング: 279701</div>
<div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113687/serendip7822-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div>
</div>
<div class="amazlet-footer" style="clear: left"></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.serendip.ws/archives/2218/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Perl で全角半角変換をモダンに行うコードを理解する</title>
		<link>http://www.serendip.ws/archives/2198</link>
		<comments>http://www.serendip.ws/archives/2198#comments</comments>
		<pubDate>Sun, 07 Jun 2009 08:06:07 +0000</pubDate>
		<dc:creator>iNo</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://www.serendip.ws/?p=2198</guid>
		<description><![CDATA[&#34;Perl で半角カナと全角カナの変換をする&#34; の記事を書いたら、&#34;404 Blog Not Found:perl &#8211; で全角半角変換をモダンに行う&#34; という CORE [...]]]></description>
			<content:encoded><![CDATA[<p>&quot;<a href="/archives/2185">Perl で半角カナと全角カナの変換をする</a>&quot; の記事を書いたら、&quot;<a href="http://blog.livedoor.jp/dankogai/archives/51220946.html" class="out">404 Blog Not Found:perl &#8211; で全角半角変換をモダンに行う</a>&quot; という CORE Module のみを使う方法というのが返ってきたのだけれど、Perl 特有の&quot;呪文&quot;というか&quot;記号のお化け&quot;のようなコードで何をしているのかがよくわからなかった&#8230;<br />
そこで、ちょうど短いコードでもあったので1行ずつ何をしているのか調べていった。</p>
<p>&quot;全角半角変換&quot; の仕方としては、文字名（<code>HALFWIDTH KATAKANA VOICED SOUND MARK</code> など）から <code>HALFWIDTH </code> を削除して対応する全角カナ一覧を作り、<code>tr///</code> で変換している。<br />
<code>eval</code> の部分は <code>NFC</code> で合字の処理をするのに必要なのかな？<code>hira2kata</code> では <code>NFC</code> が必要ないから <code>eval</code> する必要もないのだろうか。</p>
<p>（追記：<code>eval</code> の部分について）<br />
<ins datetime="2009-06-08T10:32:42+0900"><code>tr///</code> では変数展開が行われないために、<code>$hankaku</code>、<code>$zenkaku</code> を文字列内でそれぞれ変数展開してから <code>eval</code> するようになっている。</ins><br />
参考：<a href="http://perldoc.jp/docs/perl/5.10.0/perlop.pod" class="out">perlop &#8211; Perl の演算子と優先順位</a><br />
　　　<a href="http://asakura.g.hatena.ne.jp/asakura-t/20061102/1162455810" class="out">tr///で変数展開するにはevalする必要があるわけですが、 &#8211; 浅倉卓司＠blog風味？ &#8211; ひとりでもグループ</a></p>
<pre><span class="lnr"> 1 </span><span class="PreProc">#!/usr/bin/perl</span>
<span class="lnr"> 2 </span><span class="Statement">use </span><span class="Constant">5.008001</span>;
<span class="lnr"> 3 </span><span class="Statement">use strict</span>;
<span class="lnr"> 4 </span><span class="Statement">use warnings</span>;
<span class="lnr"> 5 </span><span class="Statement">use utf8</span>;
<span class="lnr"> 6 </span><span class="Statement">use </span>charnames <span class="Constant">'</span><span class="Constant">:full</span><span class="Constant">'</span>;
<span class="lnr"> 7 </span><span class="Statement">use </span>Unicode::Normalize;
<span class="lnr"> 8 </span>
<span class="lnr"> 9 </span>{
<span class="lnr">10 </span>    <span class="Statement">my</span> <span class="Identifier">$hankaku</span> = <span class="Constant">&quot;</span><span class="Special">\x</span><span class="Constant">{FF9E}</span><span class="Special">\x</span><span class="Constant">{FF9F}</span><span class="Constant">&quot;</span>;
<span class="lnr">11 </span>    <span class="Statement">my</span> <span class="Identifier">$zenkaku</span> = <span class="Constant">&quot;</span><span class="Special">\x</span><span class="Constant">{3099}</span><span class="Special">\x</span><span class="Constant">{309A}</span><span class="Constant">&quot;</span>;
<span class="lnr">12 </span>
<span class="lnr">13 </span>    <span class="Statement">for</span> <span class="Statement">my</span> <span class="Identifier">$o</span> (<span class="Constant">0xFF61</span> .. <span class="Constant">0xFF9D</span>){
<span class="lnr">14 </span>        <span class="Identifier">$hankaku</span> .= <span class="Statement">chr</span> <span class="Identifier">$o</span>;
<span class="lnr">15 </span>        <span class="Statement">my</span> <span class="Identifier">$n</span> = charnames::viacode(<span class="Identifier">$o</span>);
<span class="lnr">16 </span>        <span class="Identifier">$n</span> =~ <span class="Statement">s/</span><span class="Constant">HALFWIDTH</span><span class="Special">\s</span><span class="Special">+</span><span class="Statement">//</span>;
<span class="lnr">17 </span>        <span class="Identifier">$zenkaku</span> .= <span class="Statement">chr</span> charnames::vianame(<span class="Identifier">$n</span>);
<span class="lnr">18 </span>    }
<span class="lnr">19 </span>
<span class="lnr">20 </span>    *tr_h2z = <span class="Statement">eval</span> <span class="Constant">&quot;</span><span class="Constant">sub { local </span><span class="Special">\$</span><span class="Constant">_ = shift; tr/</span><span class="Identifier">$hankaku</span><span class="Constant">/</span><span class="Identifier">$zenkaku</span><span class="Constant">/; </span><span class="Special">\$</span><span class="Constant">_ }</span><span class="Constant">&quot;</span>;
<span class="lnr">21 </span>    *tr_z2h = <span class="Statement">eval</span> <span class="Constant">&quot;</span><span class="Constant">sub { local </span><span class="Special">\$</span><span class="Constant">_ = shift; tr/</span><span class="Identifier">$zenkaku</span><span class="Constant">/</span><span class="Identifier">$hankaku</span><span class="Constant">/; </span><span class="Special">\$</span><span class="Constant">_ }</span><span class="Constant">&quot;</span>;
<span class="lnr">22 </span>
<span class="lnr">23 </span><span class="Identifier">    </span><span class="Statement">sub</span><span class="Identifier"> </span><span class="Identifier">han2zen</span><span class="Identifier"> </span>{ NFC(tr_h2z(<span class="Statement">shift</span>)) }
<span class="lnr">24 </span><span class="Identifier">    </span><span class="Statement">sub</span><span class="Identifier"> </span><span class="Identifier">zen2han</span><span class="Identifier"> </span>{ NFC(tr_z2h(NFD(<span class="Statement">shift</span>))) }
<span class="lnr">25 </span>
<span class="lnr">26 </span><span class="Identifier">    </span><span class="Statement">sub</span><span class="Identifier"> </span><span class="Identifier">hira2kata</span><span class="Identifier"> </span>{
<span class="lnr">27 </span>        <span class="Statement">local</span> <span class="Identifier">$_</span> = <span class="Statement">shift</span>;
<span class="lnr">28 </span>        <span class="Statement">tr/</span><span class="Constant">\x{3041}-\x{3096}</span><span class="Statement">/</span><span class="Constant">\x{30A1}-\x{30F6}</span><span class="Statement">/</span>;
<span class="lnr">29 </span>        <span class="Identifier">$_</span>;
<span class="lnr">30 </span>    }
<span class="lnr">31 </span>}
<span class="lnr">32 </span><span class="Statement">binmode</span> <span class="Identifier">STDOUT</span>, <span class="Constant">&quot;</span><span class="Constant">:utf8</span><span class="Constant">&quot;</span>;
<span class="lnr">33 </span><span class="Statement">local</span> <span class="Identifier">$\</span> = <span class="Constant">&quot;</span><span class="Special">\n</span><span class="Constant">&quot;</span>;
<span class="lnr">34 </span><span class="Statement">print</span> zen2han(hira2kata(<span class="Constant">&quot;</span><span class="Constant">「ぽげむたぴぎゃみにょーん」って最初に言ったのは?</span><span class="Constant">&quot;</span>));
<span class="lnr">35 </span><span class="Statement">print</span> han2zen(<span class="Constant">&quot;</span><span class="Constant">ｳｿﾀﾞﾄﾞﾝﾄﾞｺﾄﾞｰﾝ</span><span class="Constant">&quot;</span>);
</pre>
<dl>
<dt>2行目(<code>use 5.008001;</code>)</dt>
<dd>Perl のバージョン番号を指定して、指定バージョンより新しいものであることをチェックする。<br />
    参考：<a href="http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_use_Module_VERSION_LIST" class="out">perlfunc &#8211; Perl 組み込み関数</a></dd>
<dt>5行目(<code>use utf8;</code>)</dt>
<dd>Perl にスクリプトが UTF-8 で書かれている事を教える。<br />
    参考：<a href="http://perldoc.jp/docs/perl/5.8.1/utf8.pod" class="out">utf8 &#8211; ソースコード内に、UTF-8(か、UTF-EBCDIC)を有効/無効にするためのプラグマ</a></dd>
<dt>6行目(<code>use charnames ':full';</code>)</dt>
<dd>ダブルクォートされた文字列内で、名前でキャラクタを呼び出す（<code>\x{FF9E}</code> といった部分）。<br />
    参考：<a href="http://www.rwds.net/kuroita/program/Perl_unicode.html#flg_write" class="out">Perl 5.8.x Unicode関連</a></dd>
<dt>7行目(<code>use Unicode::Normalize;</code>)</p>
<dd>Unicode 正規化 を使って合字（ここでは濁点・半濁点）を処理する。<br />
    参考：<a href="http://d.hatena.ne.jp/dayflower/20060605/1149478073" class="out">Unicode::Normalize で遊ぶ &#8211; daily dayflower</a></dd>
<dt>10行目(<code>my $hankaku = &quot;\x{FF9E}\x{FF9F}&quot;;</code>)</dt>
<dd><code>\x{FF9E}</code> は半角の濁点(<code>HALFWIDTH KATAKANA VOICED SOUND MARK</code>) 、<code>\x{FF9F}</code> は半角の半濁点(<code>HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK</code>)</dd>
<dt>11行目(<code>my $zenkaku = &quot;\x{3099}\x{309A}&quot;;</code>)</dt>
<dd><code>\x{3099}</code> は全角の濁点(<code>COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK</code>)、<code>\x{309A}</code> は全角の半濁点(<code>COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK</code>)</dd>
<dt>13行目(<code>for my $o (0xFF61 .. 0xFF9D){</code>)</dt>
<dd><code>0xFF61</code> は半角の句点 &quot;｡&quot;、<code>0xFF9D</code> は半角カタカナの &quot;ﾝ&quot;<br />
    &quot;｡&quot; から &quot;ﾝ&quot; までの文字に対して処理を行う。</dd>
<dt>14行目(<code>$hankaku .= chr $o;</code>)</dt>
<dd><code>chr</code>：引数で指定したコードに対応する文字を返す。<br />
    半角の濁点・半濁点からなる <code>$hankaku</code> に、半角の &quot;句点&quot; から半角カタカナの &quot;ﾝ&quot; までを追加していく。</dd>
<dt>15行目(<code>my $n = charnames::viacode($o);</code>)</dt>
<dd><code>charnames::viacode(<var>code</var>)</code>：コード番号 <var>code</var> の文字の名前を返す。（例:<code>HALFWIDTH KATAKANA VOICED SOUND MARK</code>）</dd>
<dt>16行目(<code>$n =~ s/HALFWIDTH\s+//;</code>)</dt>
<dd><code>$n</code> の <code>HALFWIDTH&nbsp;</code> を削除する。</dd>
<dt>17行目(<code>$zenkaku .= chr charnames::vianame($n);</code>)</dt>
<dd><code>charnames::viacode(<var>name</var>)</code>：文字の名前 <var>name</var> のコード番号を返す。<br />
    全角の濁点・半濁点からなる <code>$zenkaku</code> に、返されたコード番号（<code>HALFWIDTH </code> を削除したもの）を <code>chr</code> で文字に変換した結果を追加していく。</dd>
<dt>20行目(<code>*tr_h2z = eval &quot;sub { local \$_ = shift; tr/$hankaku/$zenkaku/; \$_ }&quot;;</code>)</dt>
<dd>変数名のプレフィクスの <code>*</code> は型グロブ。<br />
    参考：<a href="http://www.site-cooler.com/kwl/perl/2.htm#2-7" class="out">Perl講座　２章　［変数］</a><br />
    <code>$_</code> は入力レコード。<code>tr/<var>FROM</var>/<var>TO</var>/</code> は、検索文字列 <var>FROM</var> に含まれる各文字を対応する置換文字列 <var>TO</var> にマッチする文字に1文字ずつ変換する。<br />
    参考：<a href="http://www.rfs.jp/sb/perl/05/tr.html" class="out">tr/// [Perl講座 -Smart]</a></dd>
<dt>23行目(<code>sub han2zen { NFC(tr_h2z(shift)) }</code>)</dt>
<dd><code>NFC</code>：2つの文字を合字にする。<br />
    参考：<a href="http://d.hatena.ne.jp/KoshianX/20080731/1217519539" class="out">Macの合字ファイル名で困ったときにはUnicode::Normalizeで処理すべし &#8211; 狐の王国</a><br />
    <code>shift</code> で取り出した引数（変換対象文字列）を <code>tr_h2z</code> 関数に渡す。</dd>
<dt>24行目(<code>sub zen2han { NFC(tr_z2h(NFD(shift))) }</code>)</dt>
<dd><code>NFD</code>：合字を2つの文字に分解する。<br />
    <code>shift</code> で取り出した引数（変換対象文字列）を <code>NFD</code> 関数に渡して2つの文字に分解するしてから <code>tr_z2h</code> 関数に渡す。</dd>
<dt>27行目(<code>local $_ = shift;</code>)</dt>
<dd><code>shift</code> 関数で <code>@_</code> の先頭を切り出しサブルーチンの引数を取得する。</dd>
<dt>28行目(<code>tr/\x{3041}-\x{3096}/\x{30A1}-\x{30F6}/;</code>)</dt>
<dd>ひらがな から カタカナ へ変換する。<br />
    &quot;ぁ-ゖ&quot; を &quot;ァ-ヶ&quot; に変換する。
<dd>
<dt>29行目(<code>$_;</code>)</dt>
<dd><code>return</code> が無い場合は、最後に評価された値が返される。</dd>
<dt>32行目(<code>binmode STDOUT, &quot;:utf8&quot;;</code>)</dt>
<dd><code>use utf8;</code> したので、文字列に UTF-8 フラグが付いているため PerlIO レイヤを使う。<br />
    参考：<a href="http://www.rwds.net/kuroita/program/Perl_unicode.html#perlio" class="out">Perl 5.8.x Unicode関連</a></dd>
<dt>33行目(<code>local $\ = &quot;\n&quot;;</code>)</dt>
<dd>出力レコードセパレータに <code>\n</code> を指定する。<code>print</code> の出力に自動的に <code>\n</code> が付加される。</dd>
</dl>
<div class="amazlet-box" style="margin-bottom:0px;font-size:7pt;">
<div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113687/serendip7822-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/415NIum-vpL._SL160_.jpg" alt="ミニマルPerl Unix/LinuxユーザのためのPerl習得法" style="border: none;" /></a></div>
<div class="amazlet-info" style="float:left;margin-top:10px;margin-left:15px;line-height:120%">
<div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113687/serendip7822-22/ref=nosim/" name="amazletlink" target="_blank">ミニマルPerl Unix/LinuxユーザのためのPerl習得法</a>
<div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4873113687/serendip7822-22/ref=nosim/" title="ミニマルPerl Unix/LinuxユーザのためのPerl習得法" target="_blank">amazlet</a> at 09.06.05</div>
</div>
<div class="amazlet-detail">Tim Maher <br />オライリージャパン <br />売り上げランキング: 279701</div>
<div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113687/serendip7822-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div>
</div>
<div class="amazlet-footer" style="clear: left"></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.serendip.ws/archives/2198/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CPAN 使い方メモ</title>
		<link>http://www.serendip.ws/archives/2192</link>
		<comments>http://www.serendip.ws/archives/2192#comments</comments>
		<pubDate>Fri, 05 Jun 2009 11:56:45 +0000</pubDate>
		<dc:creator>iNo</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://www.serendip.ws/?p=2192</guid>
		<description><![CDATA[CPAN 初回起動 $ sudo -H cpan この後 CPAN の設定をしていく。 CPAN 起動 $ sudo cpan cpan&#62; CPAN モジュールのインストール cpan&#62; install &#038;l [...]]]></description>
			<content:encoded><![CDATA[<p>CPAN 初回起動</p>
<pre>$ sudo -H cpan
</pre>
<p>この後 CPAN の設定をしていく。</p>
<p>CPAN 起動</p>
<pre>$ sudo cpan
cpan&gt;
</pre>
<p>CPAN モジュールのインストール</p>
<pre>cpan&gt; install <var>&lt;モジュール名&gt;</var>
</pre>
<p>CPAN 終了させる。</p>
<pre>cpan&gt; quit
</pre>
<p>モジュールのインストールされた場所を確認</p>
<pre>$ perldoc -ml <var>&lt;モジュール名&gt;</var>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.serendip.ws/archives/2192/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Perl で半角カナと全角カナの変換をする</title>
		<link>http://www.serendip.ws/archives/2185</link>
		<comments>http://www.serendip.ws/archives/2185#comments</comments>
		<pubDate>Fri, 05 Jun 2009 07:55:30 +0000</pubDate>
		<dc:creator>iNo</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://www.serendip.ws/?p=2185</guid>
		<description><![CDATA[Perl を使って半角カタカナと全角カタカナの変換をするスクリプトを、標準モジュールの Encode.pm と Unicode::Japanese と Lingua::JA::Regular::Unicode を使ってそ [...]]]></description>
			<content:encoded><![CDATA[<p>Perl を使って半角カタカナと全角カタカナの変換をするスクリプトを、標準モジュールの <a href="http://search.cpan.org/~dankogai/Encode-2.33/Encode.pm" class="out">Encode.pm</a> と <a href="http://search.cpan.org/dist/Unicode-Japanese/lib/Unicode/Japanese.pm" class="out">Unicode::Japanese</a> と <a href="http://search.cpan.org/~tokuhirom/Lingua-JA-Regular-Unicode-0.01_02/lib/Lingua/JA/Regular/Unicode.pm" class="out">Lingua::JA::Regular::Unicode</a> を使ってそれぞれ変換スクリプトを書いてみる。</p>
<p>まずは、標準モジュールの Encode.pm を使った場合。<br />
変換を文字コード euc-jp で行うために、変換前と変換後に utf-8 との文字コード変換を行う必要があった。</p>
<pre><span class="Statement">use </span>Encode;
<span class="Statement">use </span>Encode::JP::H2Z;

<span class="Statement">my</span> <span class="Identifier">$str_z</span> = <span class="Constant">&quot;</span><span class="Constant">Hello Ｗｏｒｌｄ.全角カタカナデス。 12345</span><span class="JISX0208Space">　</span><span class="Constant">６７８９０</span><span class="Constant">&quot;</span>;
<span class="Statement">my</span> <span class="Identifier">$str_h</span> = <span class="Constant">&quot;</span><span class="Constant">Hello Ｗｏｒｌｄ.全角ｶﾀｶﾅﾃﾞｽ｡ 12345</span><span class="JISX0208Space">　</span><span class="Constant">６７８９０</span><span class="Constant">&quot;</span>;

<span class="Comment"># 全角カナ→半角カナ</span>
Encode::from_to(<span class="Identifier">$str_z</span>, <span class="Constant">&quot;</span><span class="Constant">utf-8</span><span class="Constant">&quot;</span>, <span class="Constant">&quot;</span><span class="Constant">euc-jp</span><span class="Constant">&quot;</span>);
Encode::JP::H2Z::z2h(<span class="Identifier">\$str_z</span>);
Encode::from_to(<span class="Identifier">$str_z</span>, <span class="Constant">&quot;</span><span class="Constant">euc-jp</span><span class="Constant">&quot;</span>, <span class="Constant">&quot;</span><span class="Constant">utf-8</span><span class="Constant">&quot;</span>);
<span class="Statement">print</span> <span class="Identifier">$str_z</span>, <span class="Constant">&quot;</span><span class="Special">\n</span><span class="Constant">&quot;</span>; <span class="Comment"># =&gt; Hello Ｗｏｒｌｄ.全角ｶﾀｶﾅﾃﾞｽ｡ 12345</span><span class="JISX0208Space">　</span><span class="Comment">６７８９０</span>

<span class="Comment"># 半角カナ→全角カナ</span>
Encode::from_to(<span class="Identifier">$str_h</span>, <span class="Constant">&quot;</span><span class="Constant">utf-8</span><span class="Constant">&quot;</span>, <span class="Constant">&quot;</span><span class="Constant">euc-jp</span><span class="Constant">&quot;</span>);
Encode::JP::H2Z::h2z(<span class="Identifier">\$str_h</span>);
Encode::from_to(<span class="Identifier">$str_h</span>, <span class="Constant">&quot;</span><span class="Constant">euc-jp</span><span class="Constant">&quot;</span>, <span class="Constant">&quot;</span><span class="Constant">utf-8</span><span class="Constant">&quot;</span>);
<span class="Statement">print</span> <span class="Identifier">$str_h</span>, <span class="Constant">&quot;</span><span class="Special">\n</span><span class="Constant">&quot;</span>; <span class="Comment"># =&gt; Hello Ｗｏｒｌｄ.全角カタカナデス。 12345</span><span class="JISX0208Space">　</span><span class="Comment">６７８９０</span>
</pre>
<p>次に、Unicode::Japanese モジュールを使った場合。<br />
<code>z2h</code>, <code>h2z</code> 関数ではカタカナ以外も変換されてしまうため、カタカナのみの変換には <code>z2hKana</code>, <code>h2zKana</code> 関数を使う必要があった。<br />
参考：<a href="http://d.hatena.ne.jp/dayflower/20060530/1148951624">半角←→全角変換，Unicode::Japanese に未公開機能が… &#8211; daily dayflower</a></p>
<pre><span class="Statement">use </span>Unicode::Japanese;

<span class="Statement">my</span> <span class="Identifier">$str_z</span> = <span class="Constant">&quot;</span><span class="Constant">Hello Ｗｏｒｌｄ.全角カタカナデス。 12345</span><span class="JISX0208Space">　</span><span class="Constant">６７８９０</span><span class="Constant">&quot;</span>;
<span class="Statement">my</span> <span class="Identifier">$str_h</span> = <span class="Constant">&quot;</span><span class="Constant">Hello Ｗｏｒｌｄ.全角ｶﾀｶﾅﾃﾞｽ｡ 12345</span><span class="JISX0208Space">　</span><span class="Constant">６７８９０</span><span class="Constant">&quot;</span>;

<span class="Statement">print</span> <span class="Identifier">Unicode</span>::Japanese-&gt;<span class="Statement">new</span>(<span class="Identifier">$str_z</span>)-&gt;z2h-&gt;get, <span class="Constant">&quot;</span><span class="Special">\n</span><span class="Constant">&quot;</span>; <span class="Comment"># =&gt; Hello World.全角ｶﾀｶﾅﾃﾞｽ｡ 12345 67890</span>
<span class="Statement">print</span> <span class="Identifier">Unicode</span>::Japanese-&gt;<span class="Statement">new</span>(<span class="Identifier">$str_h</span>)-&gt;h2z-&gt;get, <span class="Constant">&quot;</span><span class="Special">\n</span><span class="Constant">&quot;</span>; <span class="Comment"># =&gt; Ｈｅｌｌｏ</span><span class="JISX0208Space">　</span><span class="Comment">Ｗｏｒｌｄ．全角カタカナデス。</span><span class="JISX0208Space">　</span><span class="Comment">１２３４５</span><span class="JISX0208Space">　</span><span class="Comment">６７８９０</span>
<span class="Statement">print</span> <span class="Identifier">Unicode</span>::Japanese-&gt;<span class="Statement">new</span>(<span class="Identifier">$str_z</span>)-&gt;z2hKana-&gt;get, <span class="Constant">&quot;</span><span class="Special">\n</span><span class="Constant">&quot;</span>; <span class="Comment"># =&gt; Hello Ｗｏｒｌｄ.全角ｶﾀｶﾅﾃﾞｽ｡ 12345</span><span class="JISX0208Space">　</span><span class="Comment">６７８９０</span>
<span class="Statement">print</span> <span class="Identifier">Unicode</span>::Japanese-&gt;<span class="Statement">new</span>(<span class="Identifier">$str_h</span>)-&gt;h2zKana-&gt;get, <span class="Constant">&quot;</span><span class="Special">\n</span><span class="Constant">&quot;</span>; <span class="Comment"># =&gt; Hello Ｗｏｒｌｄ.全角カタカナデス。 12345</span><span class="JISX0208Space">　</span><span class="Comment">６７８９０</span>
</pre>
<p>最後に、Lingua::JA::Regular::Unicode を使った場合。<br />
<code>use utf8;</code> しないと動作しなかった。</p>
<pre><span class="Statement">use utf8</span>;
<span class="Statement">use </span>Lingua::JA::Regular::Unicode;

<span class="Statement">my</span> <span class="Identifier">$str_z</span> = <span class="Constant">&quot;</span><span class="Constant">Hello Ｗｏｒｌｄ.全角カタカナデス。 12345</span><span class="JISX0208Space">　</span><span class="Constant">６７８９０</span><span class="Constant">&quot;</span>;
<span class="Statement">my</span> <span class="Identifier">$str_h</span> = <span class="Constant">&quot;</span><span class="Constant">Hello Ｗｏｒｌｄ.全角ｶﾀｶﾅﾃﾞｽ｡ 12345</span><span class="JISX0208Space">　</span><span class="Constant">６７８９０</span><span class="Constant">&quot;</span>;

<span class="Statement">print</span> encode(<span class="Constant">&quot;</span><span class="Constant">utf-8</span><span class="Constant">&quot;</span>, katakana_z2h(<span class="Identifier">$str_z</span>)), <span class="Constant">&quot;</span><span class="Special">\n</span><span class="Constant">&quot;</span>; <span class="Comment"># =&gt; Hello Ｗｏｒｌｄ.全角ｶﾀｶﾅﾃﾞｽ｡ 12345</span><span class="JISX0208Space">　</span><span class="Comment">６７８９０</span>
<span class="Statement">print</span> encode(<span class="Constant">&quot;</span><span class="Constant">utf-8</span><span class="Constant">&quot;</span>, katakana_h2z(<span class="Identifier">$str_h</span>)), <span class="Constant">&quot;</span><span class="Special">\n</span><span class="Constant">&quot;</span>; <span class="Comment"># =&gt; Hello Ｗｏｒｌｄ.全角カタカナデス。 12345</span><span class="JISX0208Space">　</span><span class="Comment">６７８９０</span>
</pre>
<div class="amazlet-box" style="margin-bottom:0px;font-size:7pt;">
<div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113687/serendip7822-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/415NIum-vpL._SL160_.jpg" alt="ミニマルPerl Unix/LinuxユーザのためのPerl習得法" style="border: none;" /></a></div>
<div class="amazlet-info" style="float:left;margin-top:10px;margin-left:15px;line-height:120%">
<div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113687/serendip7822-22/ref=nosim/" name="amazletlink" target="_blank">ミニマルPerl Unix/LinuxユーザのためのPerl習得法</a>
<div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4873113687/serendip7822-22/ref=nosim/" title="ミニマルPerl Unix/LinuxユーザのためのPerl習得法" target="_blank">amazlet</a> at 09.06.05</div>
</div>
<div class="amazlet-detail">Tim Maher <br />オライリージャパン <br />売り上げランキング: 279701</div>
<div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113687/serendip7822-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div>
</div>
<div class="amazlet-footer" style="clear: left"></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.serendip.ws/archives/2185/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Open Mail Environment で差し込みメール送信</title>
		<link>http://www.serendip.ws/archives/127</link>
		<comments>http://www.serendip.ws/archives/127#comments</comments>
		<pubDate>Tue, 12 Aug 2008 12:47:44 +0000</pubDate>
		<dc:creator>iNo</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://www.serendip.ws/?p=127</guid>
		<description><![CDATA[Mac OSX で利用できる MUA の OME を使って差し込みメール送信をしてみる。 OME は1メール1テキストファイルで送受信メールを扱えるので差し込みメールファイルを作って送ることもできる。 差し込みメール作成 [...]]]></description>
			<content:encoded><![CDATA[<p>Mac OSX で利用できる <abbr title="Mail User Agent">MUA</abbr> の <a href="http://mac-ome.jp/site/index.html" class="out"><abbr title="Open Mail Environment">OME</abbr></a> を使って差し込みメール送信をしてみる。</p>
<p><abbr title="Open Mail Environment">OME</abbr> は1メール1テキストファイルで送受信メールを扱えるので差し込みメールファイルを作って送ることもできる。<br />
差し込みメール作成のための OME_MailMerger が見つからなかったので Perl で差し込みメール作成のためのスクリプトを作った。</p>
<pre><code>#!/usr/bin/env perl -nlaF'\t'
use strict;
use warnings;
use Encode;

my $name;
my $mail;
my $type;
my $result = "";

($name, $mail, $type)=@F;

$result .=  "To: $mail\n";
$result .=  "Subject: ココに件名を書く\n\n";
$result .=  "$name さま\n";
$result .=  "貴方の番号は $type です。\n\n";
$result .=  "--\n";
$result .=  "Serendip\n";
$result .=  "http://www.serendip.ws/";

Encode::from_to($result, "utf8", "shiftjis");

open(OUT, "&gt;upload-$..wmail");
print OUT $result;
close(OUT);
</code></pre>
<p>このスクリプトで.csvファイルからメールファイルを生成し、生成されたメールファイルを OutBox フォルダに移動して送信する。</p>
<p><code>-a</code> オプションでフィールド処理を行い、 <code>-F</code> オプションでフィールド処理のカスタムセパレータを指定する。</p>
<div class="amazlet-box ad-amazon" style="margin-bottom:0px;">
<div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113687/serendip7822-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/415NIum-vpL._SL160_.jpg" alt="ミニマルPerl Unix/LinuxユーザのためのPerl習得法" style="border: none;" /></a></div>
<div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%">
<div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113687/serendip7822-22/ref=nosim/" name="amazletlink" target="_blank">ミニマルPerl Unix/LinuxユーザのためのPerl習得法</a>
<div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4873113687/serendip7822-22/ref=nosim/" title="ミニマルPerl Unix/LinuxユーザのためのPerl習得法" target="_blank">amazlet</a> at 08.07.16</div>
</div>
<div class="amazlet-detail">Tim Maher <br />オライリージャパン <br />売り上げランキング: 4736</div>
<div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113687/serendip7822-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div>
</div>
<div class="amazlet-footer" style="clear: left"></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.serendip.ws/archives/127/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ミニマルPerl 第1章</title>
		<link>http://www.serendip.ws/archives/91</link>
		<comments>http://www.serendip.ws/archives/91#comments</comments>
		<pubDate>Wed, 16 Jul 2008 11:44:02 +0000</pubDate>
		<dc:creator>iNo</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://www.serendip.ws/?p=91</guid>
		<description><![CDATA[ミニマルPerl の第1章で出てきたオプションについてのメモ。 &#34;-n&#34;オプションは while (&#60;&#62;) { ... } があるように振舞う。（ファイル名引数があるときはファイルから、無 [...]]]></description>
			<content:encoded><![CDATA[<p>ミニマルPerl の第1章で出てきたオプションについてのメモ。</p>
<p>&quot;<code>-n</code>&quot;オプションは <code>while (&lt;&gt;) { <var>...</var> }</code> があるように振舞う。（ファイル名引数があるときはファイルから、無いときは標準入力からデータを取り込む）<br />
ただし、そのまま出力はしない。</p>
<pre>perl -wnl -e 'print;' <var>file1 file2 ...</var></pre>
<p>&quot;<code>-p</code>&quot;オプションは<code>-n</code>オプション同様にループがあるように振舞い、さらにループ中に各行の処理毎に出力をする。</p>
<pre>perl -wpl -e '' <var>file1 file2 ...</var></pre>
<p>&quot;<code>-w</code>&quot; は警告を有効に、&quot;<code>-l</code>&quot; は行末処理を行う。</p>
<div class="amazlet-box ad-amazon" style="margin-bottom:0px;">
<div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113687/serendip7822-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/415NIum-vpL._SL160_.jpg" alt="ミニマルPerl Unix/LinuxユーザのためのPerl習得法" style="border: none;" /></a></div>
<div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%">
<div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113687/serendip7822-22/ref=nosim/" name="amazletlink" target="_blank">ミニマルPerl Unix/LinuxユーザのためのPerl習得法</a>
<div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4873113687/serendip7822-22/ref=nosim/" title="ミニマルPerl Unix/LinuxユーザのためのPerl習得法" target="_blank">amazlet</a> at 08.07.16</div>
</div>
<div class="amazlet-detail">Tim Maher <br />オライリージャパン <br />売り上げランキング: 4736</div>
<div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113687/serendip7822-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div>
</div>
<div class="amazlet-footer" style="clear: left"></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.serendip.ws/archives/91/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

