Perl日記

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

2012-03-01から1ヶ月間の記事一覧

マスタデータを取り扱う

DBに入れるまでもないマスタデータをアプリケーションで取り扱うときの最近やってること。 DBに入れないからといって、設定ファイルには相応しくないデータ。 ハッシュで入れるだけだと、たとえばそのデータでセレクトボックスを作るときに取り出し順が保証…

評価の+は何個つけてもよい

適当にやってたら動いてびっくりしたのでメモ。 よくある評価用の+は無名ハッシュのあれである。 sub foo { +{ bar => 'baz' } } この+は++にしない限り何個でも置ける。 sub foo { + + + + + +{ bar => 'baz' } } ところで、数値の正負を逆にしたいとき…

Teng::Schema::Loaderを使ったらTengオブジェクトが返るので

その後Teng->newする必要なかった。 0.14から0.14_01での変更点みたい。 以下Amon2での使用の例。 MyApp.pm use Teng; use Teng::Schema::Loader; use Test::DB; my $schema; sub db { my $self = shift; if ( !defined $self->{db} ) { my $conf = $self->c…

Digest::SHAはマルチバイト文字列でも大丈夫だけどDigest::MD5だとエラーになる

同じDigest::*だと思ったら大間違いという話。 -MDigest::SHA=sha512_hexだと use Digest::SHA qw/ sha512_hex /; use utf8; use Encode qw/ encode_utf8 /; print sha512_hex("あいうえお"),"\n"; #=> ed8ad6b03b7cb459... print sha512_hex(encode_utf8("…

カッコを含む文字列を置換するところではまった話と別解とのベンチマーク

すごく長い文字列から、最初にでてきた指定文字を削除したかったのだけど、 その指定文字に開きカッコだけか、閉じカッコだけが入っているとエラーで死んだ。 my $str = q!1qaz2wsx(3edc4rfv5tgb)6yhn7ujm!; my $del = q!4rfv5tgb)6yhn!; $str =~ s/$del//; …

引数が格納される配列@_はローカル変数です

これまでまったく意識したことなかったけれど @_はlocalだと知ったのでメモ。 sub speak { my $w = &_speak_word; # ←引数なし print $w,"\n"; } sub _speak_word { my $type = shift; # ←でも引数が取り出せる if ($type eq 'laugh') { return 'HAHAHA'; } …

最近はandやorより&&や||を使うようにしている

Perlを使い出した頃は「and」や「or」の論理演算子の方が 『「&&」や「||」の記号よりもそのまま単語として読めるからよい!』 みたいなのがどこかに書いてあったのをずっと覚えていて、 実際優先順位も低いから書きやすくて使っていたけれど 最近は「&&」「…

perldoc perlperfに宮本武蔵の言葉があった

... If you want the condensed version, perhaps the best advice comes from the renowned Japanese Samurai, Miyamoto Musashi, who said: "Do Not Engage in Useless Activity" in 1645. 役に立たないことはするな 五輪書 - Wikipedia

最近のPerl WAFをベンチマークした

試したのは以下。 Catalyst -- 元祖WAF Mojolicious -- 軽量WAF Dancer -- 軽量WAF Amon2 -- シンプルWAF Amon2::Lite Amon2(Flavor::Minimum) Kossy -- ISUCONのWAF Web Application Frameworkなので、HTMLの出力を測定。 またテンプレートエンジンにはText…

decode(utf8=>$str)とdecode_utf8($str)のちがい

昨日のエントリで文字化けした件についてもう少し調べてみた。 Devel::Peekで文字化けした文字をダンプしたところ、面白いことがわかった。 UTF-8フラグがついていない文字列のはずなのに、FLAGSの欄に"UTF8"が出ていた。 FLAGS = (PADMY,POK,pPOK,UTF8) # <…