2006-05-01から1ヶ月間の記事一覧

Template-Toolkit であらかじめプラグインをロードしておく

Template-Toolkit では [% USE foo.bar %] [% foo.bar.sample(test) %]USE プラグマでプラグインを読み込みますが,アプリ全体で使うプラグインがあらかじめ決まっている場合はいちいちすべてのテンプレートに記述するのも面倒くさいです。 そんなときは, m…

半角全角ちょっとつけたし

センセーショナルな見出しにしたためか,なんかアクセス数がこれまでにくらべてすごいことになってました。びっくり。何人かトラバなさってましたがトラックバックオフにしてるんで表示されないですね。ごめんなさい。ということで,手動トラバ。 アルファベ…

半角←→全角変換,Unicode::Japanese に未公開機能が…

2008-10-21 追記 いまだに(ありがたいことですが)検索で飛んできたりブクマされたりというのがちょいちょいあるので,最新動向を書いておきます。id:tokuhirom さんが Lingua::JA::Regular::Unicode という Pure Perl Module をリリースなさいました(→ ht…

Apache2::Reload 使いたい,コンパイルエラーもトラップしたい

開発中は Apache2::Reload 使うと,変更されたモジュールを検出してリロードしてくれて便利なんですが, Class::Data::Inheritable と相性が悪い Apache2::Reload が reload した場合,mk_classdata() が呼び出されないので,クラスデータを使うとエラーが起…

DBDesigner 4 で外部キーの名前を変える

DBDesigner 4 でリレーションを貼ると,自動的に参照元のテーブルに参照先の参照フィールドの外部キーが作成されます。ところが,この参照元のテーブルを編集しようとしても,外部キーの名前が readonly になっていて変更できずに困っていました(参照元だの…

「世間はまだまだテーブル・レイアウトが主流?」from /.j

世間はまだまだテーブル・レイアウトが主流? | スラドという記事がでていました。slashdot はプログラマ人口が多い→外部プログラムから読み書きすることを考えると XHTML + CSS のほうが馴染みやすい→CSS 派多し,という結論になるのかな,と思いきや,テー…

Template-Toolkit 2.15 リリース,そして

長らくメンテされてなかったように見えた TT ですが,2.15 がリリースされました。Changes を読んでもいまいちどこがかわったのかわかりませんでした(←かっこわるす)。Perl 5.8 と UNICODE - daily dayflower で変なところで苦労していたんですが,どうも…

マウスを変えた

今までマイクロソフトのワイヤレスマウスを使っていたんですが,いまいちきちんと使えないことが多くなったので(今の環境に持ってくる前はそうでもなかったんですが),ロジクールの V400 に変えました。モバイル用ですがデスクトップ用として使っています…

ハッシュを deep merge してくれる Hash::Merge

2 つのハッシュをマージしたいとき,単純には下記のような方法で動きます。 my %a = ( key1 => 'value_a1', key2 => 'value_a2', ); my %b = ( key1 => 'value_b1', key3 => 'value_b3', ); my %c = (%a, %b); # %c is: # key1 => 'value_b1' # override # k…

Readonly は別に定数のためだけじゃなくても使える

変更不可能な変数を作るには Readonly というモジュールが使えます。スピードに関してネガティブなことが書いてあるのですが,気になる向きは Readonly::XS を「追加で」インストールすると自動的にそちらが使われるようになります。 通常は,定数などを表現…

続 POD をブラウザで閲覧する

たとえば mod_perl2 だと以下のような感じのハンドラになります(テストスクリプトも POD もないですが)。 package Podview; use strict; use Apache2::Const -compile => qw(:common); use Apache2::RequestRec (); use Apache2::RequestIO (); use Pod::H…

POD をブラウザで閲覧する(Pod::HtmlEasy で)

pod を端末から perldoc コマンドで読んでいると,関連するモジュールへハイパーリンクで飛べたらなぁという気持ちによくなります。そんなときは開発サーバでウェブサーバが立ち上がっているのなら pod2html で HTML を生成し,ブラウザで閲覧するのがおすす…

DBIx::Class での JOIN

DBIx::Class::Manul::Cookbook の "Using joins and prefetch" の前半の抄訳です。仕事上必要になってラフに読んだので参考程度に。 リレーション対象のテーブルの1つ以上のカラムを取得したり,それでソートしたりするには,join アトリビュートを使います…

Deep-copy な Clone

Perl でハッシュ等を Deep-copy したいときは Clone というモジュールがあります。これが best-practice かどうかは知りません。 そもそもそのような状況に陥っていること自体あんまりよくない兆候かもしれません。が,とりあえずメモメモ。

サブルーチンで複数値の return

いまごろ知ったのが素人くさくて嫌なんですが, #!/usr/bin/perl use constant WeekDays1 => qw(Sun Mon Tue Wed Thu Fri Sat); my @wd = qw(Sun Mon Tue Wed Thu Fri Sat); sub WeekDays2() { @wd; } sub WeekDays3() { qw(Sun Mon Tue Wed Thu Fri Sat); }…

文モディファイアとしての foreach

文の最後に if や unless をつけて条件が合致するときのみその文を実行する構文 print "OK" if $msg eq 'YES'; # is equivalent to: if ($msg eq 'YES') { print "OK"; } return unless defined $msg; # is equivalent to: unless (defined $msg) { return; …

型グロブにおける自戒

{ no strict 'refs'; *foo = sub { ... }; }みたいにしてよくつかう型グロブですが,当然ながらそのネームスペースの空間を汚しているんですね。ですから,AUTOLOAD で新しい無名サブルーチンを追加すると,他のインスタンスからもアクセスできてしまいます…

Spreadsheet::ParseExcel と UTF-8

hippo2000 さん作成の Spreadsheet::ParseExcel は Excel のワークシートを Perl から直接読むことができるので便利です。Excel ワークシートから DBI 経由で DB にたたき込むスクリプトを書いたりと重宝しています。 でも残念ながらちょっと古いので,内部…

DBIC によるモデル

DBIx::Class::Schema で作ったクラスは,そのまま直でインスタンスを生成することができます。 use My::Schema::TestTable; my $o = My::Schema::TestTable->new; $o->field1('value1');これを後付で DB に挿入するスマートな方法がわかりません。 my $db = …

DBIC::PK::Auto によるオートインクリメントフィールドの取り扱い

MySQL の AUTO INCREMENT 属性フィールドや PostgreSQL の SERIAL フィールドは,テーブルを挿入すると自動的に値をカウントアップして挿入してくれるタイプのフィールドです。SQLite では,フィールドを INTEGER PRIMARY KEY にして INSERT の際にそのフィ…

SQLite 3 でなぜか .import できない

UTF-8 で書かれた TSV ファイルを食わせようとしてるのですが, sqlite> .separator \t sqlite> .import test.tsv t_test sqlite> select * from t_test; sqlite>なぜか import できません。 もう少し現象を確定してから書き足します。

SQL::Translator を使って,DBIC からテーブル生成

反対に,DBIC スキーマクラスから SQL 文等を生成するには, % sqlt -f DBIx-Class -t SQLite --DBIx::Schema MySchemaClass.pmとやればよい…はずなのですが,sqlt コマンドがオプション等食ってくれないので,SQL::Translator クラスをごりごり触るしかいま…

SQL::Translator を使って,DBIC のスキーマクラスを自動作成

Catalyst::Model::DBIC::Schema を使いこなすのはややめんどくさい状況ですが,SQL::Translator というモジュールがあり,これに付属する sqlt というコマンドラインフロントエンドを使うと,スキーマを DB からロードして DBIC クラスを生成してくれます。…

Catalyst::Model::CDBI と Catalyst::Model::DBIC::Schema 雑感

Bundle::Catalyst の後継 Task::Catalyst では,CDBI 系ではなく,DBIC 系(DBIx::Class::Schema)がついてきます。それで,最近の DBIC ってどうなのよと思い,つらつらと調べてみました。CDBI 歴 0 日,DBIC 歴 1 日なので間違いが多いかもしれません。 C:…

APR::Table の使い方

use strict; use APR::Pool (); use APR::Table (); my $p = APR::Pool->new; my $t = APR::Table::make($p, 1); $t->add('k1', 'v1-1'); $t->add('k1', 'v1-2'); $t->add('k2', 'v2-1'); $t->merge('k2', 'v2-2'); my @v1 = $t->get('k1'); # @v1 == ('v1-1…

Data::Dumper と Storable

変数の中身を Perl コードの形に表現してくれる Data::Dumper というのがあります。吐いた内容は,たいてい eval すれば取得できるので(サブルーチンのリファレンスについては戻りません),シリアライザとして使ったりもします。 いっぽう,Storable とい…

WAVE DASH 問題と Encode::EUCJPMS

Unicode と,私たちが普段用いるエンコーディングの変換表の不備によって,文字コードを変換するといくつかの文字についておかしくなったりします。そのうちの WAVE DASH 問題に関するブログが http://taijiro.tama.net/mt/archives/2006/05/encode.html に…

mod_perl 2.0 での SCRIPT_NAME

<Location "/abc/def/ghi"> SetHandler perl-script PerlResponseHandler MyRespHandler </Location>の時に,MyRespHandler.pm に渡される SCRIPT_NAME($r->filename)は,「/abc」になっています。PATH_INFO($r->path_info) は「/def/ghi」。これは困りました。まだ調査中です。自分で Reques…

mod_perl 2.0 でのハンドラの戻り値

mod_perl で ModPerl::Registry や ModPerl::PerlRun を使わずに,自力でハンドラを書く場合, sub handler : method { my ($class, $r) = @_; ... return Apache2::Const::OK; }みたく書き始めるわけです*1。ここで,エラーが発生した場合や,リダイレクト…

mod_perl 2.0 での2種類のハンドラ modperl と perl-script

mod_perl 2.0 では,SetHandler で指定するハンドラタイプとして,modperl と perl-script の2種類があります。この違いは何なんだろうと思い,mod_perl のドキュメント を読み込んでみました。おおざっぱにまとめると,一般的に使うべきなのは perl-script …