Perl日記

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

2011-01-01から1年間の記事一覧

言語のクラス変数は違うはなし

「初めてのRuby(P151)」を読んでいたら以下のような記述があった。 class Foo @@class_variable = 'foo' def print p @@class_variable end end class Bar < Foo p @@class_variable #=> "foo" @@class_variable = 'bar' def print p @@class_variable end e…

@ISAでの継承は読込が要る

会社の後輩に教えていて普通に分からなかったので赤裸々メモ。 わたしって、(ry PerlでのOOのチュートリアルにperlbootとかperltootみていたら同一ファイル内での継承ばかりだったので、分割してみたら、動かなかった。 Animal.pm package Animal; sub speak…

5.8.5での正規表現とクラス名ではまる

メモ。 5.8.5を使用しなければならない中で、簡易なViewクラス作ったら見事に動かなかった。 __PACKAGE__が正規表現内でクラス名にならない いや、正確には取れるんだけど、その中でeオプションで更に評価したらとれない感じ。 正規表現内で正規表現を使う(…

コーディングで意識すべきこと

久しぶりに「Perlベストプラクティス」を開いたら、忘れていた忠告をされたのでメモ。 コードを書くときには、あなたのプログラムを保守する誰かが、あなたの居場所を知っている凶暴な変質者であると心得よ (P5) 確かにこう考えたら迂闊に杜撰なコード書けな…

Amon2をCGIで動かした...えっCGI!?

はい、CGIです。 さくらのレンタルサーバースタンダードプランでまだ借りていて、 PerlでちゃんとWebサイトを動かすのにCGIくらいしかないのでまあやってみた。 最近東方の自作アレンジというジャンルがおもしろいなーと思い、公式のタグ検索だけだとどうも…

配列への論理和代入での注意

ちょっと悩んだのでメモ。 あるメソッドにおいて、引数を全部配列に入れる、ただし引数がなかったらデフォルトのリストを配列に入れる、ということをしたかった。 sub my_method { my ($self, @list) = @_; @list ||= @DEFAULT; … } しかしこれはエラーで怒…

wantarrayは伝播する

タイトル通り。 というか今まで意識してなかったけど、試したらそうだったのでメモ。 #!/usr/bin/env perl use strict; use warnings; sub a { return b() } sub b { return c() } sub c { return d() } sub d { return e() } sub e { return wantarray? 1..…

Text::Xslate::Bridge::TT2Likeの改行のやつ

いつのまにかText::Xslate::Bridge::TT2Likeのhtml_line_break()他3つがデフォルトでHTMLエスケープされるようになってた。 もうこんなことしなくていいんだね。やったね。 [% html_line_break(html_escape(report.item1 || "")) %]↓ [% html_line_break(rep…

CGIのベンチマーク

時代に逆らいCGIでのベンチマーク。 さくらレンタルサーバのスタンダードプランでPerlを使うにはCGIの選択肢しかないので、 効率のいい書き方を考えてみる。 その前に素の状態のベンチマークを測ってみた。 さすがに共有サーバでベンチマークをとるのは迷惑…

Apache+Starman+Amon2とApache単体の静的ファイル出力ベンチマーク

メモ。 環境は最後に。 Apache+Starman+Amon2 $ starman --disable-keepalive app/app.psgi$ ab -c 100 -n 1000 http://127.0.0.1/app/static/img/ttt/1/sss/thum.jpg … Document Path: /app/static/img/ttt/1/sss/thum.jpg Document Length: 120369 bytes C…

iMac(Mid 2011)にPerl5.14.1でmod_perl2.0.5を入れたメモ

タイトルのとおり入れてみたので未来の自分用。 $ curl -LO http://perl.apache.org/dist/mod_perl-2.0-current.tar.gz $ tar zxvf mod_perl-2.0-current.tar.gz $ cd mod_perl-2.0.5/apxsを使ってmod_*.soのところに入れてもらう。 $ which apxs /usr/sbin/…

WEB+DB PressのOAuthコードをPerlで書いてみた

WEB+DB PRESS Vol.63作者: 竹迫良範,和田卓人,じゅんいち☆かとう,太田昌吾,小野修司,ミック,嶋田裕二,個々一番,みやけん,清水亮,おにたま,中島聡,角田直行,はまちや2,上谷隆宏,青木俊介,大塚知洋,生尾剛士,大和田純,WEB+DB PRESS編集部出版社/メーカー: 技術…

顔に見える計算式

use strict; use warnings; my $i = 0; # ||||||||||||| my $j = -- $i - $i --; # \ / print "$j\n"; 途中で心折れた。

system()とコマンド入力演算子(逆クオート演算子)の出力

system()と``は似たようなものかと思っていたら、今日唐突にはまったのでメモ。 system()は出力をそのままにしてくれるけど、``は出力結果がreturnされる。 called.pl #!/usr/local/bin/perl print "called!!\n"; caller.pl #!/usr/local/bin/perl print "sy…

MooseのBUILDARGSで

URIオブジェクト作るんだけど、プロパティとしても同じことができないかなんとかしたい。おお、何言ってるのか分からない。 package WWW::ImagePager; use Any::Moose; use URI; has 'basepage' => (is=>'rw', isa=>'URI'); sub BUILDARGS { my ($self, %arg…

mainをnewする

といったことができるか試してみた。 #!/usr/bin/env perl package main; use strict; use warnings; use feature qw/ say /; use Any::Moose; has 'x' => ( is => 'rw', 'isa' => 'Int' ); has 'y' => ( is => 'rw', 'isa' => 'Int' ); no Any::Moose; # ma…

少なくとも4種類入ったパスワードを作成

要件定義 以下の種類が少なくとも1文字は存在するパスワードを作成する。 英大文字 英小文字 数字 記号(!,#,$,%,&,@,?,*,+,-) 実装 MyPassword.pm package MyPassword; use strict; use warnings; my $DEFAULT_PASSWORD_LENGTH = 8; my @c = ('a'..'z'); # l…

ベンチマーク・無限ループと再帰呼び出し

ある条件に満たない場合、それを中でもう一度再帰的に呼ぶのがいいのか、 あるいは最初から無限ループにして、条件が満たされたら脱出するのがいいのか、 分からなかったのでベンチマークしてみた。 ただ、サブルーチン呼び出しのコストは高いとどこかで見た…

namespace::autocleanについて調べた

読んでます。 Perl CPANモジュールガイド作者: 冨田尚樹,タナカユカリ出版社/メーカー: ワークスコーポレーション発売日: 2011/04/08メディア: 単行本(ソフトカバー)購入: 20人 クリック: 2,028回この商品を含むブログ (20件) を見る その中でずっとなんと…

use libについて

lib.pmのPODを読んだメモ。 lib - search.cpan.org @INCに追加する use lib LIST; は、 BEGIN { unshift(@INC, LIST) } とほぼ同じである。 サーチパスである@INCの末尾ではなく、先頭に(unshift)追加される。 もしこの際、 パスを指定しない 存在しないパス…

サブルーチン名に「!」「?」を使えるようにがんばった

昨日の続き。 ソースフィルタを使って作った。 Xubname.pm package Xubname; use strict; use warnings; use Filter::Simple; my %IDENT = ( '?' => __PACKAGE__.'_is_', '!' => __PACKAGE__.'_destroy_or_danger_', ); FILTER_ONLY code => sub { s[ ( sub …

サブルーチン名に「!」「?」を使おうとしてうまくできていない

Rubyでは「!」がつくメソッド名は、破壊的を意味する。「?」がつくメソッド名は、真偽値を返却する。 逆輸入的にPerlでも同じことができないか考えてみた。(CPANなしで考えてみた) なんか…あんまり綺麗じゃないけれどこんな感じでやっつけた。 package Xubna…

配列内要素のシャッフルを考える【図】

.array_explain{border:1px solid #cccccc;border-collapse:collapse;margin:0;} .array_explain th,.array_explain td{border:1px solid #cccccc;} .array_explain td{text-align:center;width:40px;} .array_explain th.dollar_n{background-color:#5555dd…

配列内要素のシャッフルを考える

先にグッドプラクティス。 use List::Util; my @shuffled = shuffle(@array); さてこの中はどのように実装されているのだろうか。 まずシャッフルとは 配列内の要素をランダムに順番を入れ替える(シャッフル)場合、大きく2種類の方法がある。 偏りのあるシャ…

exitを捕捉する

通常は、Youがdeadならdieしちゃいなよ、ということでdie→evalして例外を捕捉する。 が、常識外れのexitで勝手に終わっちゃっているプログラムをなんとかする。 最初はシグナルハンドラというか疑似シグナルでなんとかなるかなーと思っていたけれど、それで…

なんかいろいろ

大変だった。 来週から更新できるはず。

呼び出し位置によるインクリメント挙動

ファイルを連番に変換するスクリプトを書いていたところ、「001」から始めたかったのに、なぜか「000」から始まっていて警告も出ていなかったのでメモ。 #!/usr/bin/env perl use strict; use warnings; use feature qw/ say /; { my $num = 1; sub closure1…

最近使用Perlモジュール自分まとめ

カテゴリ 多機能|重い|非推奨 軽い テンプレートエンジン Template Text::Xslate WAF Catalyst Mojo WWWアクセス LWP Furl CPAN cpan cpanm OOP Moose Mouse 継承 base parent ORマッパ DBIx::Class DBIx::Skinny|Teng ログ Log::Log4perl Log::Minimal …

サブルーチンリファレンスの実行方法

よく考えたら…よく考えなくても当たり前だったんだけれど、メモ。 my $code_ref = sub { print "実行しました。\n" }; $code_ref->(); &{$code_ref}(); デリファレンスはそういえば2種類あったと思い出した。 「->」で取り出すか、「頭にファニー文字つける…

stdClassをやってみた

PHPのstdClassがシンプルだったので、Perlでやってみた。 PHP first_name = 'Taro'; $obj->family_name = 'Yamada'; print $obj->first_name; //=> Taro print $obj->family_name; //=> Yamada Perl stdClass.pm package stdClass; use strict; use warnings…