perl
Catalyst は Web アプリケーションを開発するときに、フレームワークとしてとても便利です。ひとつの Web サービスを作ろうとすると、以下のような様々な処理が必要になってきます。 ユーザーに見せるWeb インターフェイス アクセス集計などの日次バッチ処理…
設定ファイルを書くときに、単純なハッシュやリストのときは良いのですが、データ構造が複雑になってきたときは、ちょっとややこしくなってきます。そんなときは、YAML::Dump() に教えてもらえます。
$var = $bool ? $foo : $bar; という書き方はよく見ますが、 if ( $bool ) { $foo = $value; } else { $bar = $value; } 実は、こういう書き方も、 $bool ? $foo : $bar = $value; こう書くこともできます。可読性とのトレードオフを考慮して使用してくださ…
perl 5.005 から使えます。 適当な名前でアップしてブラウザからアクセスしてください。 #!/usr/local/bin/perl use ExtUtils::Installed; my $o = ExtUtils::Installed->new; print "Content-Type: text/plain", "\x0D\x0A" x 2; printf "%s %s\n", $_, $o-…
例えば、このようなコードをすっきる見せるために、 $self->{'foo'}->{'bar'} = 123; $self->{'foo'}->{'baz'} = 456; . . .
POD を書いている際に、参考にしようと、ふと思い立って集計してみました。 集計した環境は、Catalyst, Plagger など依存モジュールが多いモジュールが入った環境です。
my @array = ('foo', 'bar', 'baz'); と、いう配列があって、それをキーに foo => 1, bar => 1, baz => 1, と、いうハッシュを生成したいとき my %hash; for my $key (@array) { $hash{$key} = 1; } と、書くのが一般的ですが、下記でも書けます。 my %hash …
昨日、4/21 秋葉原 UDX で JPA の第一回セミナーがあったので参加してきました。同時翻訳の受信機が先着40名だったので、心配だったのですが、翻訳したスライドが用意されていたので大分助かりました。 スライドの翻訳だけではなく、プリントアウトされたも…
活動内容 トップダウンで攻めていく Perl 文化のマーケティング、ブランディング 対企業 技術力の底上げ 散らばっているリソースの統合(情報の管理) セミナーや研修など、2009年現在、最先端の人たちがどうやって Perl を使っているかなど 対企業で新人研…
自己紹介 Jay Shirley IRC に常駐 irc.perl.org (jshirley) http://search.cpan.org/~jshirley/ http://github.com/jshirley/ ベストではなくベターを目指す どれだけやっても不満は残るもの 最初からうまくやらなくてもいい徐々に上を目指そう 失敗したらよ…
1. Plugin プラグインの使用を控える 間違った使用方法、実装方法で定義されていることが多い プラグインの使いどころ リクエストディスパッチのロジックを監視、変更する場合のみ リクエストパラメーターの変換、Catalyst のメソッド実行チェーンの変更を含…
ブラウザで search.cpan.org から tar ball を持ってこなくても、cpan シェルでバージョンを指定してインストールできます。 cpan[1]> m Test::Declare Module id = Test::Declare CPAN_USERID NEKOKAK (Atsushi Kobayashi <nekokak cpan org>) CPAN_VERSION 0.04 CPAN_FILE N/</nekokak>…
何通りかあります。 yes コマンド yes '' | cpan -i Some::Module yes に空文字列を引数に与えないと、'y' をパイプに送ってしまい、デフォルト値選択ではなく、必ず y を選択してしまうので注意! 環境変数 PERL_AUTOINSTALL PERL_AUTOINSTALL='--defaultde…
Error モジュールが例外処理を書くのに便利そうだなと思って、採用する前にオーバーヘッドがどれくらいあるのかと思い調べてみました。
標準じゃないモジュールの場所が知りたい プロジェクト固有のモジュールを使ってるときに、そいつの場所を知りたいときがある。 %INC に入っています。
今日 DBIC を使ってて若干ハマったのでメモです。 sub list { shift->schema->resultset('User')->search({}, { 'order_by' => 'user_id' }); } sub as_fdat { map +{ $_->get_columns }, $_[1]->all; } sub list_as_fdat { my $self = shift; [ $self->as_f…
先のエントリで HTML::TreeBuilder::LibXML を紹介しましたが、HTML::TreeBuilder::XPath と、LibXML は下記のように微妙に挙動が違うので、Web::Scraper 付属の scraper コマンドも LibXML を使うように変更しました。 HTML::TreeBuilder::LibXML を使うと…
昨日、HTML::TreeBuilder::LibXML がリリースされました。 Web::Scraper を 16 倍速くする HTML::TreeBuilder::LibXML を書いたhttp://search.cpan.org/~tokuhirom/HTML-TreeBuilder-LibXML-0.01_02/(デベロッパーリリース) http://search.cpan.org/~tokuh…
$HOME/.vimrc に以下を書いておけば、 autocmd FileType perl :map <up> <esc>:!/usr/bin/perl %<cr> autocmd FileType perl :map <down> <esc>:!/usr/bin/perl -wc %<cr> カーソルキーの↑で、開いているウィンドウのソースを実行します。 カーソルキーの↓で、開いているウィンドウのソー</cr></esc></down></cr></esc></up>…
なぜか、perldoc DBIx::Class::ResultSet に get_column() は載ってるのに、get_columns() が載っていなかったのでメモです。 $col1 = $rs->get_column('column1'); とかじゃなくて、 { 'column1' => 'value1', 'column2' => 'value2', 'column3' => 'value3…
3 キャリアの CSS の実装の差異を吸収してインライン展開してくれるという、HTML::MobileJpCSS ですが、CSS ファイルが大きくなってくるにつれ、処理時間が気になってきたので、内部処理を見直してチューニングしてみました。チューニング作業は Devel::NYTP…
メインに書きました。 Catalyst でかんたんログインを実装する方法
色々試して原因を特定するのに 2 時間以上ハマってしまいました。 package MyApp::Controller::Foo; sub bar : LocalRegex('(\w+)') sub baz : LocalRegex('^baz') だと、/foo/baz は bar() にマッチ package MyApp::Controller::Foo; sub baz : LocalRegex(…
Catalyst で「ログイン状態を記憶する」のようなオートログイン機能を実装する方法をメインのブログに公開しました。Catalyst でオートログインとブラウザを閉じるまで有効な Cookie を共存させるCatalyst::Plugin::Session::DynamicExpiry を使いつつ、Cata…
CPAN モジュールのソースを読むのに毎回、 vi `perldoc -l Some::Module` とか打つのが面倒臭くてシェルの alias を書いてみました。
以前から Controller にロジックをガリガリ書いてて、いい加減分離とかテスト書けるようにリファクタリングしないとなと思っていたので、モダン Perl 入門を読んで、今までなんとなくモヤモヤ考えていたことが、かなりクリアになったのをきっかけに、ファイ…