使い慣れていないPerlでハマったのでメモ。 正規表現のパターンに変数を使ったとき、その変数の値が正規表現のメタ文字を含んでると正しく動かない。言われてみればその通りなんだけど、気づくのに30分近くかかった…。 quotemetaを使って事前にエスケープすれば解決。 $value = quotemeta( 'foo(bar)' ) ; if ( $text =~ /$value/ ) { print "OK.\n" ; }
Perlモジュールのバリデーターと呼ばれるジャンルのモジュールなどをバリデーションという観点ではなく、引数を明示するという観点から整理しました。 バリデーターの種類 バリデーターというものは、一般的に引数が期待される型など(整数か、文字列か、URLか、メアドか等)になっているかどうかをチェックするというものです。特に、Webアプリにおけるフォームから入力されるデータのチェックに活用されることが多いです。そういういった意味から、Perlのバリデーターモジュールはフォーム系と非フォーム系に分類することができます。 フォーム系のバリデーター等 FormValidator::Lite CPAN本にも紹介されている強力なフォームバリデーターです。フォームバリデーターとしては、フォームの型の定義、チェック、エラーメッセージの定義、が必要ですが、やりたいであろうことのだいたいがそろっているモジュールで実
Devel::NYTProf は Perl5 の世界でもっとも人気があるプロファイラである。表示が美麗であるし、ステップごとの処理速度が簡単にわかるのでとても便利だ。 そんな Devel::NYTProf であるが、Starlet/Starman のようなプリフォーク式のサーバーでうごくウェブアプリケーションとくみあわせる場合の方法論として、わかりやすい資料がみあたらなかったのでここに記すものである。 環境変数 NYTPROF を設定する Devel::NYTProf は環境変数で挙動を変えられる。 plack とくみあわせる場合には、以下のようにするとよい。 NYTPROF=sigexit=int:savesrc=0:start=no sigexit=int 通常、Devel::NYTProf は END { } ブロックでデータのファイナライズ処理をおこなうのだが、SIGNAL によっ
I released Cookie::Baker that provides HTTP cookie generator and parser http://search.cpan.org/~kazeburo/Cookie-Baker/ https://metacpan.org/release/Cookie-Baker ### synopsis use Cookie::Baker; $headers->push_header('Set-Cookie', bake_cookie('foo','val')); my $cookie = bake_cookie('foo', { val => 'val', path => "test", domain => '.example.com', expires => '+24h' }); my $cookies_hashref = crush_cook
僕のperlの先生monmonさんに今日もまた教えてもらった。 perlがどのようにスクリプトを解釈しているのかを事前に知ることのできるB::Deparseというものがあるらしい。 ↓のサイトを参考にさせていただいた。 http://www.g-ishihara.com/perl/compiler01.html B::Deparseってのは、perlスクリプトをコンパイルして、そこから更にソースコードを生成(デコンパイル?)するらしい。なのでperlがどのようにそのスクリプトを解釈しているのかってのがわかるとか。 ちなみにBモジュールってのはperlのコンパイラ系のモジュールで、Oモジュールってのはそのモジュールを操作するためのインターフェースみたいなものとのこと。 ではやってみる。 $ perl -MO=Deparse -e 'use constant HOGE => 1;print H
YAPCも近いので近況書いてみようと思います :) ひさしぶりにログインしたけど、左上のネコかわいいっすね! ぼくは今も VOYAGEGROUP という会社で働いてます。主にiOS向けのサービスをやる事業部にいますが、アプリサーバーはほとんどがperlで書かれたもの。バリバリ動いてくれてます。他にはPHPで書いたものもあるし、ObjCもさわるし、バッチとかもろもろ含めるとnodeやらrubyとかpythonとかいろいろ雑食に使ってます。 perlについて言うと、執筆当時なかったのは http://metacpan.org。今はほぼ cpan.org の代わりに使うようになりました。特に良いなと思うのは+1機能で、これのおかげでもはや全 cpan update を見る苦行せずとも、最近の++された一覧や、もっとサマライズされた http://niceperl.blogspot.jp/ の週刊
※本ページは『モダンPerl入門 増補改訂版(仮)』の特設サイトです。商品紹介のほか、電子書籍版の早期ディスカウント販売(β版を先行提供)などを予定しています。今後の更新情報は「CodeZine Books」のFacebookページなどで配信していきます。 本書の内容 本書は、Perl言語でプログラミングする上で、筆者の経験を基に日々の仕事で使えそうなティップスやベストプラクティスを集めた本です。基礎知識は身につけている読者を想定して、Perlの基本文法やプログラミングの基本は意図的にカバーしていないため、プログラミング初心者にとって本書は難解かもしれません。 2009年に刊行した初版では、いまだに根強い「Perl=CGI」「Perl=オブジェクト指向ができない」「Perl=開発が止まっている」といった間違った思い込みを正したいという当時の筆者の思いから、筆者が使っている最新ツールやモジュ
utf8 な文字列を特定のバイトサイズで切り分ける処理って Perl でどう書けば一番良いのかを長いこと考えてた(あまり困ってはなかった)んだけど、UTF-8文字列をバイト数でカットした時の末尾の処理 見たら簡単に書けた。 #!/usr/bin/perl use strict; use warnings; use Encode qw( is_utf8 decode _utf8_on ); require bytes; my $utf8 = decode( 'euc-jp', "この日本語テキストは euc-jp で書かれていますが utf8 に変換されます" ); my @splited = byte_split( $utf8, 12 ); binmode STDOUT, ':utf8'; printf "utf8 string = %s\n", $utf8; for my $str (@
SQLite 3.8.0 が出たので、DBD::SQLiteにバンドルされているライブラリも更新して、1.41_01としてリリースしました。SQLite 3.8.0ではクエリプランナーが一新されているほか、where節で限定する部分インデックスも利用できるようになっています。 新しいクエリプランナーの詳細については下記をどうぞ。 http://www.sqlite.org/queryplanner-ng.html 私自身はまだ使い込んでいませんが、SQLiteの作者氏によれば、sqlite.orgで2ヶ月以上使ってみたけれども問題は出ていないとのこと。DBD::SQLiteのテストから判断する限り、今回の変更によって余分なsortがひとつ減ったりしていますので、通常は新しいクエリプランナーの方が多かれ少なかれよい結果が期待できるはずですが、前回のクエリオプティマイザ最適化のときにもあったよ
I’ve been seeing the occurrences of perl programmers not understanding perl’s very simple (and sometimes buggy but easily fixable) handling of Unicode strings. I confess I had the same misunderstanding until 6–7 years ago, and don’t want everyone to repeat the same mistake. Let’s forget what you know for 5 minutes, and take this simple course. 1. print($a, $b) and print($a . $b); Let’s forget, for
https://github.com/gfx/App-test-travis Travis-CI は CPAN Testers のない言語だとライフチェンジングなサービスだし、 CPAN Testers のある Perl においてもpushごとにCIを走らせたりちょっと変わった設定でテストを走らせたりできる大変便利なサービスですが、設定ファイルを正しく書くのがわりと面倒で、うまく動かすために.travis.ymlを少し変更してcommit & pushというのを何度もするはめになったりします。なので、ローカルで.travis.ymlを読んで実行するコマンドがあれば便利だろうというのがこれを作った動機です。 まだ作りはかなり適当で、before_install, install, before_script, scriptセクションを順番に実行するだけのもので、envやversionsをよし
よく miyagawa さんとかが comaint が云々といっていますが、意外としられていないのが comaint の実態です。 まずは PAUSE の処理フローについて考えてみましょう。 まず minil release とかして tar ball を PAUSE のサーバーにアップロードします。この時、アップロード先は authors/id/M/MO/MOZNION/HTML-Shakan-0.18.tar.gz とかになります。 そうすると PAUSE のインデクサがブンブンと動きだして、META.json の provides セクションまたは .pm を解析して、package とバージョンの情報が抽出され、データベースに登録されます。 この際、新規ネームスペースや、自分がもってるネームスペースならいいのですが、他の人がもってる namespace の場合には UNAUTHOR
http://shanon-tech.blogspot.jp/2013/05/perl.html Perl モジュールの作り方、2013年においては Authoring tool をつかって作るのがよいです。具体的には Minilla でつくるのがオススメであります。 perlbrew なり plenv なりで perl をいれたあとは、 % cpanm Minillaとして Minilla をインストールします。 % minil new Fooとすると、Foo.pm のスケルトンができあがります。作者の名前などは ~/.gitconfig などから自動的にさがしてきますので、設定不要です。 できあがったディレクトリは以下のような形になっています。 Foo ├── Build.PL ├── Changes ├── cpanfile ├── lib │ └── Foo.pm ├── LI
cpanfileでは、requires "git:..."; のように、gitやtarballのURL等を指定すれば cpanm --installdeps . でモジュールがインストールできる「裏ワザ」があることが 結構知られているようです。しかし、これは好ましくありません。そもそも CPAN::Meta::Spec準拠ではありません。 これはあくまでcpanm側が第1引数にgitやtarballのURLなどを指定すればよしなに インストールしてくれるから現状は「偶然」そういう動きになっているだけです。 (cpanm git:...でインストールできるので、requires "git:..."; って書いてあれば 入れてくれてしまうってことです。) あくまでインストールにcpanmを使った場合に動くってだけの限定的な話で、しかも今後は 動かなくなる可能性が高いです。 実際問題、requi
C84の宣伝です。Perlの入門書を書きました。内容は、雅ちゃんがハッカークロウにPerlを教えてもううという内容で、以下の内容を含んでいます。 Perlの開発環境を整えよう スカラー 配列とリスト ハッシュ サブルーチン コンテキスト 正規表現 リファレンス オブジェクト指向 内容は、よくあるPerlの基本からオブジェクト指向まで入れました。plenvやcpanmなども利用しています。内容は、堅苦しくならないように会話形式で進んでいくので比較的読みやすいのではないかと思っています。執筆の時間があまりなかったので、いろいろ不備があるかと思いますが、もし興味がありましたらぜひ買いに来てください。スペースは、3 日目 月曜日 東5ホール ペ11b 雅なラクダです。よろしくお願いします!!あたりまえですが中身は18禁ではないです!!
Carton 1.0 がでたところで、Web アプリケーション開発のフローを一度見直しておきたい、そんな人も多いでしょう。 そんな方のために僕のやりかたをまとめました。各社、議論の叩き台にしていただければよろしいかと存じます。 もっとも重要なことは、、 Carton を使うときに、僕が最重要だと思うことは、できるだけ本番環境と開発環境の環境をそろえるということです。CPAN モジュールが本番と開発でバージョンちがうから挙動がちがってた!! なんてのは時間の無駄ですし、よくないことですからね。 ですから、各開発環境と本番環境をできるだけそろえることを意識していきたいとおもいます。 DarkPAN は使ってない そんなに DarkPAN 的なのを使うほど、DarkPAN 的なオレオレモジュールがないので、git submodule で管理しています。 【201308061241update】
http://weblog.bulknews.net/post/57356232719/carton-1-0-is-released Carton 1.0 がリリースされました。おめでとうございます! miyagawa++ というわけで早速手元でうごかしてみたところ、いくつか問題があったので miyagawa さんに修正していただきました。 1.0 リリースまでにためしたいところだったのですが、面倒くさくて無理でした。 今回のアップデートで個人的にいいなーとおもったのは以下のような点です。 carton update が実装された 待望の carton update が実装されております。これにより、あたらしめのバージョンに移行することができますね! carton check が実装された cpanfile に記述されてるけどインストールされてないモジュールを確認できる!! carton.
Carton v1.0.0 is released on CPAN. Since the first announcement at YAPC::NA 2011, I’m sure it has taken more time than necessary, but after my attempt to grok Ruby’s bundler more, i refactored and rewrote most of the code, and I think it’s usable for the most of production apps. I’ve been using it on my production website that handles millions of requests, and I know a lot of businesses use carton
Perl5.9の時点では,assersionsと-Aコマンドラインスイッチという仕組みでCのassert(3)のようなことができるようになるはずだったらしい。しかし,そのメカニズムはPerl5.10には結局採用されなかった。 開発中はassert()が欲しい,しかし,リリース後の実行時パフォーマンスは落としたくない,というのがAssertを考えるときのジレンマというわけだ。そんななかで,CPANのCapr::Assertは関数呼び出しを完全に消し去ることができるので悪くない方法だと思う。 use Carp::Assert; assert($x > 1) if DEBUG; DEBUGはCarp::Assertの提供する定数関数で,その値が偽ならばこの一文はコンパイル時に完全に削除される。 $ PERL_NDEBUG=0 perl -MO=Deparse -MCarp::Assert \ >
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く