Perl日記

日々の知ったことのメモなどです。Perlは最近やってないです。

Perl

二重引用符中の認識されないエスケープシーケンス

二重引用符(ダブルクオート)の中にバックスラッシュを置くとき、 「\n」とか「\t」とかのエスケープシーケンスは展開されるけれど、 「\j」のような言語が認識できないようなものがどうなるか、言語間で差が出たのでメモ。 Perl print "$]\n"; print "\j\n…

PerlでPDFに他のPDFのページを差し込む

http://r9.hateblo.jp/entry/20120513/p1ScanSnapでスキャンしたPDFをページごとに回転する - Perl日記r9.hateblo.jpの続き。(もう3年も前だ) 本体PDFに表紙PDFのページを差し込む 漫画の単行本をスキャンして自炊するときには、白黒の本体部分と、カラー…

キャプチャした$1はもう一回m||すると消える

久しぶりPerl書いたらハマったのでメモ。こんな仕様だったか。 my $str = "hoge123fuga"; # 123をキャプチャ $str =~ m|hoge(\d+)fuga|; warn $1; # 括弧使わないで正規表現マッチ $str =~ m|hoge|; warn $1; # さっきの$1は消える 123 at - line 5. Warning…

carton execでGetopt::Long

自分もメモ。 コマンド実行時に「--」で明確に引数の終わりを示さないと、carton上のGetopt::Longが動かなかった。 # hoge.pl use Getopt::Long; my $verbose = ''; GetOptions ('verbose' => \$verbose); print "verbose: $verbose\n"; $ carton exec perl …

Perl勉強会で話した

3/8 18:40から約2時間、自分含め7人くらいで、Perlについて語り合った。いいね! 前回と違い、何も準備しなかったのがよかった 最初に内容を固定してしまうと、どうしてもそれに沿った内容を意識してしまって、柔軟性がなくなるからかな 参加者同士の質疑…

Redmine-Chanに「いつやるのか?」「いまでしょ!」機能を追加した

Redmine::Chan で IRC からプロジェクト管理を見て使わせていただいております。 https://github.com/onishi/Redmine-Chan 空前の「いまでしょ!」ブーム(職場限定)なので、minechanにもこのビッグウェーブに乗ってもらうことにしました。 優先度をMAXにして…

Commandパターン

CommandパターンをPerlでやってみた。 https://github.com/rightgo09/perl-headfirst-designpattern/tree/master/command/undo インターフェースとなるCommandクラスでexecute()とundo()を宣言する Commandクラスを具象化したクラスで上述の2つのメソッドを…

取置きとstateとMooseX::Singletonベンチマークした

Singletonパターンの前に、以前覚えたstateって最適化されて速いのかなとベンチマークしてみた。 myで外側にするのとMooseX::Singletonを比較に。 MooseX::Singletonが多機能っぽい分不利かなーとは思ってた。 20倍か。 MooseX::Singletonを外して比較。 Ben…

Stateパターン

Strategyパターンの双子であるところのStateパターンをPerlでやってみた。 本で読んだだけだとピンと来なかったけど、実際に手で書いてみると確かにやっていることは同じだった。 https://github.com/rightgo09/perl-headfirst-designpattern/tree/master/st…

Strategyパターン

読んでる。 Head Firstデザインパターン ―頭とからだで覚えるデザインパターンの基本作者: Eric Freeman,Elisabeth Freeman,Kathy Sierra,Bert Bates,佐藤直生(監訳),木下哲也,有限会社福龍興業出版社/メーカー: オライリージャパン発売日: 2005/12/02メディ…

RubyistのためのPerlを書いてみてる話

Perl->Rubyと経験して、「Rubyを知っているけどPerlを知らないひと向け」のPerl資料を書いてみている。 https://github.com/rightgo09/Perl-for-Rubyist/blob/master/README.md まあもう少し書いてみよう。 ブラウザで簡単に書けるのが面白い。

Test::Specその3

they 単なるitのエイリアス 複数形の言い回しに向いてる xdescribe/xcontext/xit/xthey それぞれdescribe/context/itの代わりに使う 要はpending扱いにしてくれる TODOラベルを貼る必要がない spec_helper 各テストファイルで共通のものを書いておいて、spec…

Test::Specその2

元ネタ「RSpec の入門とその一歩先へ、第2イテレーション - t-wadaの日記」「RSpec の入門とその一歩先へ、第3イテレーション - t-wadaの日記」 第2、第3イテレーションも見ておく describeに説明を追加 describeの引数は2つが限界なので、文字列にして説…

Test::Spec入門

元ネタ「RSpec の入門とその一歩先へ - t-wadaの日記」第一イテレーション。 PerlのTest::Specだとどうなるかやってみた。 message_filter_spec.t Perlのテストファイルの拡張子は*.t RSpecっぽくするために、*_spec.tにする とりあえずテストファイルをt/に…

日本語クラス名でClass::Accessorを使えるのは5.16からという話

試行メモ。 Perlはかなり前からuse utf8すれば、日本語(マルチバイト)をクラス名とか変数名とかに使えるけれど、 クラス名を日本語にして、use Class::Accessor(::Fast)すると、 5.14系ではエラーになるけど、5.16系では大丈夫だった。 ちなみにClass::Acces…

先日の勉強会の問題をPerlで解いた

出題された問題↓ http://mizti.hatenablog.com/entry/2013/01/26/011841作ったもの↓ https://github.com/rightgo09/crazy_gin 安直に全パターン網羅しようとすると絶賛爆死するので、アルゴリズムってやっぱり大事だなーと思った。 あと、初めてstateを使え…

eachの途中で止めると再開が途中からになる話

Rubyのeach_with_indexは添字と要素が一度に取れるのでとても便利なときがある。 Perlで同じことをするには、5.12までは、ループ外に変数を置いて、ループ内でインクリメントするのが一般的だったけれど 5.12からはeach()が配列に対しても使えるようになって…

Redmine-Chan使ってます

http://yapcasia.org/2012/talk/show/7b6375aa-bd29-11e1-ad51-b39f6aeab6a4https://github.com/onishi/Redmine-Chanfork https://github.com/rightgo09/Redmine-Chan IRCでチケット作成、更新、参照ができるととても捗ってよいです! AnyEvent::IRCとかも勉…

Rubyのクラス変数と同じ動きにはClass::Data::Inheritableを使う

まー基本的にはクラス変数使わずにインスタンス変数でなんとかするのですが、メモ。 言語のクラス変数は違うはなし - Perl日記 の続き。Rubyだと、 class Hoge @@hoge = 'hoge!!!' end class Fuga < Hoge def hoge @@hoge end end puts Fuga.new.hoge #=> 'h…

「RubyistのためのPerl」で発表した

毎週末の(Rubyメインの)勉強会で 「RubyistのためのPerl」というタイトルで90分くらい喋った。のどが疲れた。 発表資料 http://dl.dropbox.com/u/9152456/perl_for_rubyist/slide.html こういう発表みたいなのしたことなかったから勝手が分からなかった スラ…

livedoorブログの画像まとめからダウンロードするスクリプト書いた

https://github.com/rightgo09/p5-livedoorblog-pict-downloaderとりあえずMac用。$ENV{HOME}/Pictures に保存する。 carton用のファイルがもっと簡単に書けたらいいな。 Gemfileみたいな。

Perlの世代格差を感じた話

昨日ローカルな勉強会に参加してきた。 初回だったので、簡単なペアプロをすることになったのはいいものの、僕ともうひとかたのペアだけPerlであとのペアはRubyで実装ということになった。イエ-Perlで実装だぜーと思ってたけれど、以下の理由により、いろいろ…

2ch画像スレ風画像ビューア「Gazosure」作った

https://github.com/rightgo09/Gazosureデフォルトで、config/deployment.plに 'BASE_DIRECTORY' => File::Spec->catdir($ENV{'HOME'}, 'Pictures'), ってしてある。Mac用。startupで起動して http://localhost:9091/ にアクセス。こんな感じ。

Perlのいいところについて考えてみた。

変数 シジル(ファニー文字)で大体分かる 特殊変数も例に漏れない $ならスカラ変数 ->ならデリファレンスかメソッド(サブルーチン) @とか[]なら配列 %とか{}ならハッシュ &とか()ならサブルーチン ついてなくて小文字ならサブルーチン 大文字なら定数かファイ…

substrの開始番号

ハマったのでメモ。 Perlのsubstrは substr(文字,開始位置,長さ) の開始位置は0オリジンで、 SQLのsubstrも同じく SUBSTR(文字,開始位置,長さ) と同じ使い方ができるが、1オリジンである。 Perl print substr('string!!!', 2, 1); #=> 'r' SQL -- MySQL SELE…

podは式をぶったぎる(コードは死ぬ)

よくpackageの途中で改行されてるのを見る。 Try::Tiny package # hide from PAUSE Try::Tiny::ScopeGuard; でもこれをpod形式でぶったぎると死ぬ。つまりトークンとトークンの間。 package =pod hide from PAUSE =cut My::Module; Invalid version format (…

どこまで分割する?

「PerlのWebプログラミング効率化のTips」を読んだ感想 - サンプルコードによるPerl入門 http://d.hatena.ne.jp/perlcodesample/20120609/1339246531 短くて再利用性がなく、細かくしてもメリットがないような処理は、処理2のように直接書いてしまっても良い…

()の中に何かいる

一度勉強した覚えがあるけど忘れてたので、プログラミングPerlを参照したメモ。 $x = (7, 7, 7); #=> 7 $x = () = (7, 7, 7); #=> 3 <6/8追記> $x = (7, 7, 7); #=> 3 となっていたのは誤りです! @akajiro thanks! </追記>下はなぜ3なんだろう? プロ…

Amon2にStreaming機能をつけようとした話

PSGIのStreamingなやり方がわかったので、一番触ってたAmon2でもできないかと思ってforkして書いてpull requestまでしてみた。 イメージとしては、 any '/' => sub { my ($c) = @_; $c->render('index.tt'); }; といういつものスタイルを壊さないような感じ…

Perlのバージョン毎のqr//速度

久しぶりにモダパー読み直してたらqr//と文字列の正規表現マッチ速度が出てたので、新しい5.16とかも出てきてるし、やってみた。 Mac OS X 10.7.4 (Intel Core i7) perl-5.8.9 perl-5.10.1 perl-5.12.4 perl-5.14.2 perl-5.16.0 perl-5.17.0 use strict; use…