perl

PHPでTest::MoreするならLimeを使おう

「自分のメイン言語はPerlだけど、会社ではPHP使ってる。PHPでもTest::Moreみたいにテストしたい」という人は結構いるんじゃないかと思います。「php test::more」でググると出てくるのはここ。 Test::MoreのPHP版 : cotalog 紹介されているtest-more.phpは…

Yokohama.pm #3 に行ってきた

去る11月28日、Perl系のイベントでは初参加となるYokohama.pmにお邪魔してきました。最初は「京都→自宅→横浜」のルートを考えてたけど、移動が無駄になるので「京都→横浜」と直行することに。荷物は気合いで。18時開始で会場までJRの駅から5分と書いてあった…

Shibuya.pm京都サテライトとYokohama.pmと楽天テクノロジーカンファレンスに行ってきた

普段ずっと家にいる引きこもりには、体力的にハードな週でした。 26日 京都出張 27日 出張2日目 → Shibuya.pm #10 京都サテライト 28日 京都発 → Yokohama.pm #3 29日 楽天テクノロジーカンファレンス まとめて書こうかと思ったけど、長くなるのでやっぱり分…

Shibuya.pm#10 京都サテライト in はてな 行きます

Shibuya Perl Mongersテクニカルトーク#10 京都サテライト開場のご案内 - antipop 明日・明後日と京都に仕事で行くので、帰宅を1日伸ばしてはてなオフィスにお邪魔することにしました。東京に戻るのを早めて現地参加しようと思ったら、あり得ない速さで申し…

Template::Plugin::Hatenaがメモリリークしてる件

FastCGIプロセスがえらくメモリを食ってるのでおかしいなと思ったら、だんだん育ってる。ペロ… これはメモリリーク!怪しい部分は最初から察しがついていたので、ところどころコメントアウトしてabで大量のリクエストを送り込んで、メモリ消費量を見るという…

PHPの思想と言語表現

先日の 第3回PHP懇親会に行ってきた で「PHPで書くとシンタックスが長ったらしくて嫌だ」ということを書いたら、いくつかフィードバックがあったので乗ってみる。Perlの「$hoge =~ s/^Hoge/Fuga/」という書き方に対して、PHPの「$hoge = preg_replace('/^Hog…

動画で知るClass::C3とNEXTの違い

CatalystとかDBICを理解しようとすると頻繁に出てくるClass::C3。継承ツリーをどうにかするものらしいけど、挙動を把握するのは難しそうだなーという印象でした。「CatalystもそのうちNEXTからClass::C3ベースに変わるし」なんて話題が出ても、そもそもどっ…

DBICにfindByほげほげ生やしたけどCatalystでコケた

先日の「Sub::AutoでDBICにfindByほげほげを生やしてみた」が予想外に大きな反響で嬉しい反面、若干のとまどいも感じる今日この頃です。で、そいつを喜び勇んでCatalystアプリに組み込んだら、 (in cleanup) Can't locate object method "DESTROY" via packa…

Sub::AutoでDBICにfindByほげほげを生やしてみた

Sub::AutoでAUTOLOADを隠蔽 - dann@webdev - dann's portal が面白そうだったのでDBIC::ResultSetにfindBy〜を生やしてみた。perldoc見ても$selfがどこに入ってくるのか分からんかったけど、@_に関数名のマッチが入って、その次に来るみたい。 #!/usr/bin/pe…

続・DBICが発行するSQLのテーブル名をクォートさせたい

DBICが発行するSQLのテーブル名をクォートさせたい を書いたら、hide-Kさんがトラバくれて解決策を提示してくれた。しかも、id:miyagawaさんからもブクマコメントで同様のアドバイスが。 Re:DBICが発行するSQLのテーブル名をクォートさせたい - はてな#hide-…

DBICが発行するSQLのテーブル名をクォートさせたい

※解決しました。フォローエントリ → 続・DBICが発行するSQLのテーブル名をクォートさせたいhoges, conditionsというテーブルがあって、hoges_conditionsを中間テーブルとしてmany_to_manyの関係を持たせた時にハマった。 create table `hoges_conditions` ( …

DBICのmany_to_manyでできること

ググっても意外と情報が出てこないmany_to_manyを試してみた。DBはMySQLで。 ■ DB作成 DBはこんな感じで作る。 create table users ( id int not null auto_increment primary key, name varchar(255) not null unique ) engine=innodb; create table roles …

Catalyst + FastCGI + LighttpdでControllerが見つからなくなる件

myapp_server.pl上だと普通に動くのに、FastCGIで動かすと規定のControllerにリクエストが飛ばない事態が発生。MyApp::Controller::Admin, MyApp::Controller::Admin::Userという2つのControllerがある時に、/admin/*へのリクエストは問題ないが、/admin/use…

CentOS5.2でPerlのSRPMがビルドに失敗した件

初めてさくらで専用サーバを借りたらCentOS5.2(i386)が入ってました。今まで作ったRPMとかはx86_64用だったので、そのへんも作り直しです。んで、Perlを DBIC_NO_WARN_BAD_PERL=1 しなくてもいいように & @INCに/usr/local/CPANをデフォルトで追加しておき…

Template-Toolkitで指定区間を一行にまとめる

Template-ToolkitでSmartyの{strip}相当のことをやろうとしたけど、該当する機能が見つからない。具体的には、 <table> <tr> <td> <p>これを一行にしたい</p> </td> </tr> </table> とかテンプレートに書いた時に <table><tr><td><p>これを一行にしたい</p></td></tr></table> てなHTMLを出力させたい。CPAN見てもそれっぽいプラグインが見当た…

Perlでファイルを読み込む

ITProが古い記事をおもむろに再掲したことに端を発する、今時のPerlの常識的なファイルの扱いが結構な反響を読んでいる様子。 404 Blog Not Found:perl - 勝手に添削 - Perl入門#1@ITPro Perlで調べ物をしていると古い情報に当たりやすいので、こういう今時…

use utf8すると\dで全角数字がマッチする

#!/usr/bin/perl use strict; use warnings; { use utf8; my $res = ('123' =~ /^\d+$/) ? "match" : "unmatch"; print "use utf8 ... $res\n"; } { no utf8; my $res = ('123' =~ /^\d+$/) ? "match" : "unmatch"; print " no utf8 ... $res\n"; } こ…

Perlのmapは非破壊で使いたいものらしい

元々は、 print join("-", map { s/a/A/g } @list), "\n"; みたいにして@listの各要素を置換した配列のprintを1行で書けないのかなとか思って書いたんですが… Perl界隈の人達が反応してくれるという全く予想外の事態に。根本的にはmapが何を返すのかを分かっ…

Template-Toolkitのテンプレートでsubstrを使う

TTのテンプレート内で文字列をsubstrしたいなと思った時に、情報が見付けにくかったのでメモ。 [% hoge.substr(2, 4) %]これだけ。すげー簡単。ふつうにマニュアルに載ってるんだけど、まずVMethodsというのがよく分かってなかったので見付けられなかった。 …

Perlの@INCを指定してビルドする

Perlで「use 何とか;」として外部のモジュールを読み込む場合、Perlの特殊変数である配列@INCにあるパスから探してくれます。ここに任意をディレクトリを追加するには、 スクリプトで use lib qw(/hoge /foo); とか書く httpd.confに SetEnv PERL5LIB /hoge:…

Template-ToolkitのWRAPPERでレイアウト制御

my $tt = Template->new( LOAD_TEMPLATES => [ Template::Provider::Encoding->new(INCLUDE_PATH => 'templates') ], STASH => Template::Stash::ForceUTF8->new, PROCESS => $c->{layout}, ); $tt->process($c->{template}, $c->{stash}) || die $tt->error…

DBICが入らなくて、CentOS5.1でPerlのRPMリビルドした

帰省するのにUbuntu入れてたノートをWindowsXPに戻して(つぶしが効くので安心)、VMwareの環境をコピーして持って帰ろうとしたら、CPUがCoreDuoでx86_64なVM環境が動かないことが判明。VMwareの開発環境を一から作り直すことになってしまったので、どうせな…

FormValidator::Simple::Plugin::Japaneseのインストール

Perlのバリデータとして有力っぽい、FormValidator::Simpleを試そうとして、インストールで問題発生。日本語用PluginのFormValidator::Simple::Plugin::Japaneseが入りませんよ。 FormValidator::Simple::Plugin::Number::Phone::JPのテストが通らない件 - n…

Template::Toolkitでutf-8を扱う

Perlでutf-8って、何かと面倒くさいのね。前に使ってたのは5年ぐらい前に共用サーバでcgi書いてたぐらいだから全く把握してなかった。まず判断が付かないのが、use utf8;した方がいいのかどうか。全部utf-8な環境では最初にuse utf8;しておくのが吉とdankoga…

Module::Starter::PBPで最初のテストが通らなかった場合の対処メモ

TAKESAKOさんの「Part1 正しいPerl/CGIの書き方:ITpro」を参考にモジュールを書いてみようとしたら、perl Build testしたところで t/00.load.........NOK 1 # Failed test 'use MyLib::Hoge;' # at t/00.load.t line 4. # Tried to use 'MyLib::Hoge'. # Er…

Perl分かってない

#!/usr/bin/perl use strict; use warnings; my @list = ('apple', 'banana', 'orange'); my @list2 = @list; map { s/a/A/g } @list; print join("\n", @list), "\n\n"; # Apple - bAnAnA - orAnge print join("\n", map { s/a/A/g } @list2), "\n"; # 1 - …

CPANモジュールのインストール先を指定する

縁あって4年ぶりぐらいにPerlを触り始めました。前は共用サーバでCGI書いてただけなので、今時のPerlな知識は皆無。 まず引っ掛かったのがCPANモジュールのインストール。インストールしたモジュールは特定のディレクトリにまとめて、rsyncなりsvnで各サーバ…