perl

Catalyst ベースのアプリケーション設計(構想)

Catalyst は Web アプリケーションを開発するときに、フレームワークとしてとても便利です。ひとつの Web サービスを作ろうとすると、以下のような様々な処理が必要になってきます。 ユーザーに見せるWeb インターフェイス アクセス集計などの日次バッチ処理…

YAML ではどう書くか perl に教えてもらう方法

設定ファイルを書くときに、単純なハッシュやリストのときは良いのですが、データ構造が複雑になってきたときは、ちょっとややこしくなってきます。そんなときは、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 の head1 によく使われる項目名ランキング

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 …

JPA セミナー #1 参加報告まとめ

昨日、4/21 秋葉原 UDX で JPA の第一回セミナーがあったので参加してきました。同時翻訳の受信機が先着40名だったので、心配だったのですが、翻訳したスライドが用意されていたので大分助かりました。 スライドの翻訳だけではなく、プリントアウトされたも…

JPA セミナー #1 (代表理事挨拶)

活動内容 トップダウンで攻めていく Perl 文化のマーケティング、ブランディング 対企業 技術力の底上げ 散らばっているリソースの統合(情報の管理) セミナーや研修など、2009年現在、最先端の人たちがどうやって Perl を使っているかなど 対企業で新人研…

JPA セミナー #1 (Session 1 Better Perl Practices 最新 Perl 開発手法のススメ)

自己紹介 Jay Shirley IRC に常駐 irc.perl.org (jshirley) http://search.cpan.org/~jshirley/ http://github.com/jshirley/ ベストではなくベターを目指す どれだけやっても不満は残るもの 最初からうまくやらなくてもいい徐々に上を目指そう 失敗したらよ…

JPA セミナー #1 (Session 2 Catalyst 改)

1. Plugin プラグインの使用を控える 間違った使用方法、実装方法で定義されていることが多い プラグインの使いどころ リクエストディスパッチのロジックを監視、変更する場合のみ リクエストパラメーターの変換、Catalyst のメソッド実行チェーンの変更を含…

CPAN モジュールをバージョン指定でインストールする方法

ブラウザで 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>…

CPANモジュールのインストール時に自動でデフォルト選択をする方法

何通りかあります。 yes コマンド yes '' | cpan -i Some::Module yes に空文字列を引数に与えないと、'y' をパイプに送ってしまい、デフォルト値選択ではなく、必ず y を選択してしまうので注意! 環境変数 PERL_AUTOINSTALL PERL_AUTOINSTALL='--defaultde…

Error.pm のオーバーヘッド

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…

scraper コマンドの LibXML 対応 & UserAgent 切り替え対応パッチ

先のエントリで HTML::TreeBuilder::LibXML を紹介しましたが、HTML::TreeBuilder::XPath と、LibXML は下記のように微妙に挙動が違うので、Web::Scraper 付属の scraper コマンドも LibXML を使うように変更しました。 HTML::TreeBuilder::LibXML を使うと…

Web::Scraper を 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…

vim で開いてるソースのシンタックスチェックをショートカットで実行

$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>…

DBIC で検索結果のレコードをハッシュで受け取る方法

なぜか、perldoc DBIx::Class::ResultSet に get_column() は載ってるのに、get_columns() が載っていなかったのでメモです。 $col1 = $rs->get_column('column1'); とかじゃなくて、 { 'column1' => 'value1', 'column2' => 'value2', 'column3' => 'value3…

3 キャリア対応の HTML::MobileJpCSS 0.02 をチューニング

3 キャリアの CSS の実装の差異を吸収してインライン展開してくれるという、HTML::MobileJpCSS ですが、CSS ファイルが大きくなってくるにつれ、処理時間が気になってきたので、内部処理を見直してチューニングしてみました。チューニング作業は Devel::NYTP…

Catalyst でかんたんログインを実装する方法

メインに書きました。 Catalyst でかんたんログインを実装する方法

Catalyst の LocalRegex は定義順を見る

色々試して原因を特定するのに 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…

モジュールのソースをvimで手軽に読む

CPAN モジュールのソースを読むのに毎回、 vi `perldoc -l Some::Module` とか打つのが面倒臭くてシェルの alias を書いてみました。

Catalyst のファイルレイアウトを晒す

以前から Controller にロジックをガリガリ書いてて、いい加減分離とかテスト書けるようにリファクタリングしないとなと思っていたので、モダン Perl 入門を読んで、今までなんとなくモヤモヤ考えていたことが、かなりクリアになったのをきっかけに、ファイ…