<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Perl on Marketechlabo</title><link>https://www.marketechlabo.com/tags/perl/</link><description>Recent content in Perl on Marketechlabo</description><generator>Hugo -- gohugo.io</generator><language>ja-jp</language><lastBuildDate>Fri, 05 Apr 2019 00:00:00 +0900</lastBuildDate><atom:link href="https://www.marketechlabo.com/tags/perl/index.xml" rel="self" type="application/rss+xml"/><item><title>Perlのよく使うワンライナー（テキスト処理）</title><link>https://www.marketechlabo.com/server-infrastructure/perl-one-liner/</link><pubDate>Fri, 05 Apr 2019 00:00:00 +0900</pubDate><guid>https://www.marketechlabo.com/server-infrastructure/perl-one-liner/</guid><description>
&lt;p&gt;Perlのワンライナー。
&lt;code&gt;sed&lt;/code&gt;や&lt;code&gt;awk&lt;/code&gt;では扱いにくい、複雑な条件分岐や変換が必要なテキスト加工（CSVファイル処理など）に適している。UTF-8が標準化した現在では文字コード変換のニーズは減っているが、複雑な正規表現やPerlの組み込み機能を活用できる場面では有用である。
いろいろオプションはあるのだが、最小限に絞って備忘録的に。&lt;/p&gt;
&lt;h2 id="よく使うオプション"&gt;よく使うオプション&lt;/h2&gt;
&lt;h3 id="基本"&gt;基本&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-e 'スクリプト'&lt;/code&gt;： 実行するPerlスクリプトを指定（1行）&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-perl" data-lang="perl"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;perl &lt;span style="color:#f92672"&gt;-&lt;/span&gt;e &lt;span style="color:#e6db74"&gt;&amp;#39;print &amp;#34;Hello&amp;#34;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;output:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-perl" data-lang="perl"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Hello
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="入力が前提"&gt;入力が前提&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-l&lt;/code&gt;：（入力から改行を取り除いたうえで最後に）出力結果を改行する。表示制御の目的で使われることが多い。データ加工の際は使わないほうが安全（使うとしても最後の処理として）。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-perl" data-lang="perl"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;perl &lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#f92672"&gt;le&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;print &amp;#34;Hello&amp;#34;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;output:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-perl" data-lang="perl"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Hello
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-n&lt;/code&gt;：ファイルを読み込んで1行ずつ（whileで）処理する。行の内容は特殊変数&lt;code&gt;$_&lt;/code&gt;に格納される。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-perl" data-lang="perl"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;perl &lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#f92672"&gt;ne&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;func&amp;#39;&lt;/span&gt; file
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;は&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-perl" data-lang="perl"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;perl &lt;span style="color:#f92672"&gt;-&lt;/span&gt;e &lt;span style="color:#e6db74"&gt;&amp;#39;open(FILE, &amp;#34;&amp;lt; file&amp;#34;); while(&amp;lt;FILE&amp;gt;) { func($_); }&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;と同じことになる。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-perl" data-lang="perl"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;perl &lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#f92672"&gt;ne&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;print $.&amp;#34;: &amp;#34;.$_&amp;#39;&lt;/span&gt; rand&lt;span style="color:#f92672"&gt;.&lt;/span&gt;txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;output:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-perl" data-lang="perl"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;9&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;13&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;53&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;5&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;45&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-p&lt;/code&gt;：&lt;code&gt;-n&lt;/code&gt;に加えて結果の&lt;code&gt;$_&lt;/code&gt;を&lt;code&gt;print&lt;/code&gt;する。&lt;code&gt;sed -e&lt;/code&gt;みたいなことをするときに使う。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;perl -pe &amp;#39;s/[0-3]/A/g&amp;#39; rand.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;output:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-perl" data-lang="perl"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;9&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;AA
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;5&lt;/span&gt;A
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;45&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-0777&lt;/code&gt;：入力を行ごとに区切らない。&lt;code&gt;-p&lt;/code&gt;や&lt;code&gt;-e&lt;/code&gt;と同時に用いられる。行ごとに変わるはずのない文字コード判別などの際に使う。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-perl" data-lang="perl"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;perl &lt;span style="color:#f92672"&gt;-&lt;/span&gt;MEncode::Guess &lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;0777&lt;/span&gt; &lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#f92672"&gt;ne&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;print guess_encoding($_, qw/shiftjis eucjp utf8/)-&amp;gt;name&amp;#39;&lt;/span&gt; multibyte&lt;span style="color:#f92672"&gt;.&lt;/span&gt;txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;output:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-perl" data-lang="perl"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;utf8
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-i　ファイル名&lt;/code&gt;：ファイルの上書き&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-i拡張子 ファイル名&lt;/code&gt;：ファイルの上書き＆拡張子付きのバックアップファイル生成&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;-i&lt;/code&gt;オプションは&lt;strong&gt;末尾（スクリプトの後）に記述する&lt;/strong&gt;こと。それ以外の位置だとマルチバイト文字を含む場合などうまくいかないことがある。&lt;/p&gt;</description></item></channel></rss>