Perl

DBIx::MoCoと格闘中

DBIx::MoCo触り中。基本的な使い方は分かったが、joinが色々分からない。 いつも通りdbはrailsのマイグレーションで作成。アプリはcatalystで。 ただ今回、行き詰まったのでアプリ使う意味が(まだ)無い。 http://github.com/hirafoo/moco_training/tree/ma…

class::dbiの練習

何か唐突にclass::dbi使ってみた。crudとリレーションしかやってないけど。 リレーションも親子だけだけど。多対多は実にめどかったので略。 catalystで作ってたけどsledgeに変更。 http://github.com/hirafoo/class-dbi-crud/tree/master 何故に今更CDBI? …

それgrepでもできるよ

http://d.hatena.ne.jp/kiyo_hiko/20090603/1244038719 Perlで、こういう書き方は何とかならんものか? if ($x == 1 or $x == 2 or $x == 3) { 何かの処理; } use strict; use warnings; my @match = qw/1 2 3/; for my $x (qw/-1 0 1 2 3 4/) { if (grep /$…

設定ファイルに絶対パスを書くのを避けたい

アプリの置いてあるパスを絶対パスで取得したい。 楽なのはconfにPerlSetEnvで書いてプログラムで$ENV{APP_PATH}とかで受け取ればいいけど、confに絶対パス書くのを避けたい。 案1:File::Spec->rel2absを使ってみる 大抵のwafで作ったアプリは起動時に1回だ…

続・同じモジュールを複数回useしたときの挙動とかシンボルテーブルとか

柔道家からコメント拝啓。毎度感謝です。 useの処理 BEGIN { require Module; import Module LIST; } perldoc -f require Note that the file will not be included twice under the same specified name.同じ名前のブツは2回は展開されませんよ的。 複数回u…

同じモジュールを複数回useしたときの挙動とかシンボルテーブルとか

神ネタ。もう神タグ作ろうかな。 perlではモジュールをuseすると、use元のシンボルテーブルに、そのモジュールをuseしたよっていうフラグみたいなものが付くらしい。 で、同じモジュールを複数回useしても、そのフラグを見て、既にuseされてたらuseの処理は…

perlで遅延評価の真似事

要はコンパイル時ではなくメソッド実行時に値を評価しやがれと。 何それどうすんのと思ってたけど神に聞いて実例見せてもらったので適当なサンプルで真似てみる。 俺要素が入り混じってるので合ってるかとか正しいかとかの保証は無し。 package Mod; use bas…

Templateでコメントアウト

[% hoge # comment %][% hoge # 改行も可 %] [%# 最初の % の直後に # を書くと そこのブロックは全てコメント扱いになる %] htmlでいう <!-- --> は無いので、長々とコメント書きたいなら、コメント用・処理用のディレクティブ( [% %] )に分けたらいん…

Makefile.PLのrequiresを略記

requires 'hoge'; requires 'huga'; requires 'foo'; と書くよりも requires $_ for qw/ hoge huga foo /; と書くほうが好きだ。 バージョン指定するときは requires 'hoge' => 0.01; とかしなきゃいけないけど、まーハッシュ使ったら楽できるんじゃないのと…

my宣言とスカラーリファレンス取得を同時に

確かCatalystだかPlaggerのソースで $hoge = \my $hugaみたいなコードがあったけど、myにもバックスラッシュ付くのねーってただそんだけ 最初は何コレmyのリファレンス?とか思った。

(! -s $file) は -z でもおk

柔道家tips。 ファイルサイズを確認する -s を使って、ファイルが存在しなかったら〜な処理をしたくて if (! -s $file) と書いてたら柔道家から それ -z で と。 perldoc -f -s したら知らないの沢山出てきた。

+{}は無名ハッシュの宣言っていうソースはperldoc -f mapにあった

どこに書いてあったか覚えてなくて以前探しても探せなかったんだけど今更見つけたのでメモっておこう。 他にもあるかも。つかそもそも他で見た気がする。 or to force an anon hash constructor use "+{" @hashes = map +{ lc($_), 1 }, @array # EXPR, so n…

cpanモジュールにリポジトリへのリンクを張ろう

先日、作ったモジュールが5.6.2でだけテストがコケるーと書いたら、コメントで原因を教えてもらったので(参照)直してcpanにupった。 ついでに、どうやらリポジトリへのリンクを張る機能が出来たようなので(参照)やってみた。 http://search.cpan.org/~hi…

5.6でだけテストがコケとる

http://www.cpantesters.org/show/Template-Plugin-LinkTo.htmlこないだ作ってからチビチビいじってるcpanモジュールが、5.6.2の環境でだけテストがコケとる。 謎い。 diffも出してくれんからよーわからん。5個目がコケるとか言われましても。 ローカルでテ…

勝手に Re:配列の値をキーにハッシュを生成するワンライナー

追記 Craftworksさんからコメントで教えてもらった個所を修正。コメントアウトしてるところ。 scalar消しました。 http://d.hatena.ne.jp/Craftworks/20090505/1241496331 スライスでも出来ます。(my宣言と代入を分ける必要があるのでワンライナーにはなり…

コアモジュールかどうか確認する

柔道家から教えてもらった。 % corelist Test::Base Test::Base was not in CORE (or so I think) % corelist Test::More Test::More was first released with perl 5.006002% corelist -a Test::More Test::More was first released with perl 5.006002 5.0…

CPAN Authorになりました

やろうやろうと思ってたけど、案外さくっといけました、と。 hirafoo (HIRAFOO) - metacpan.org 何を作ったかというと、Ruby on Railsのlink_toメソッドみたいな動きをするもの。 Template-Plugin-LinkTo-0.093 - like link_to in Ruby on Rails - metacpan.…

モジュールのバージョンの確認方法あれこれ

神 http://d.hatena.ne.jp/kamipo/20080708/perl_module_version % pv CGI Catalyst URI CGI 3.15 Catalyst 5.7014 URI 1.35 typestarさん http://delicious.com/url/a7081ff2f74a5d9232ee9a6134546309 % perl -MDBIx::Class\ 9999 DBIx::Class version 9999…

JPAセミナーに参加してきた

有用なレポートは他の人が書いてるからそっち見たらいいと思うよマジで! なのでここでは主に口頭であったことのメモ書きを。でもこのメモすら他の人と被ってる上にメモ間違いが含まれてるから。 不完全な走り書きのようなものです。 会場では先着順でリアル…

データを返すようなモデルメソッドのテストはfixtureだ

ロジックや、booleanとか値を返すようなメソッドのテストは書けるようになった。 データベースからの問い合わせ結果、DBICでいうResultSetを返すようなメソッドではどう書けばいいか分からなかった。 ということをTwitterでぼやいたら天から神の声が降ってき…

YAMLとYAML::SyckはLoadの挙動が違う

ただのメモです。 http://d.hatena.ne.jp/foosin/20090416/1239903771にトラバ頂いた。多謝。 まー前述の通り見るからにYAML.pmで死んでるし、やってることはYAML::Load(shift)なのでYAMLが何かしてるんだろなと。 あとえらい人から補足を受けた。それぞれの…

データセクションにアレイrefをさくっと書く

マニュアル読めば書いてあることですが。 データセクションに改行区切りでデータを書いて、それ全体を一つのアレイrefにしたいときは、こう。 #!/bin/perl use strict; use Test::Base; plan 'no_plan'; sub return_arrayref { [qw/hoge huga foo/]; } filte…

Test::Baseのyamlフィルタで空配列を作るときの動作が理解できない

ある関数が空配列を返す事を期待したテストを書こうとしよう。 データはyaml形式で書くのが楽なので、そうする。 まずは、空配列の書き方を確かめよう。 use strict; use warnings; use Data::Dumper; use YAML::Syck; sub p { print Dumper shift } my $yam…

Test::Baseでハッシュの比較をしよう

今までずっとisとokで頑張ってたけど、keysで回してハッシュの比較する気にはならなくて、調べた。1時間はかかった。 Reserve->addがハッシュを返すとして。 filters { input => ['yaml', 'add'], expected => 'yaml', }; sub add { Reserve->add('reserve',…

proveのstateは t/ にしか効かない気がする

http://d.hatena.ne.jp/dayflower/20090120/1232440742 を見ながら、catalystアプリでテストしてて、失敗したテストだけをやろうとしたら、期待通りの動作をしなくて困ってた。 このときの自分のcatalystアプリのディレクトリ構造と、テスト実行コマンド。。…

標準じゃないモジュールの場所が知りたい

プロジェクト固有のモジュールを使ってるときに、そいつの場所を知りたいときがある。 % tree . |-- lib | `-- Mod.pm `-- main.pl こんなとき、訳あってMod.pmの場所を得たいとする。Module::Pluggableみたいなことがしたいのだ。 例だから簡単な構造にして…

#shibuya.pmで質問してきた

http://d.hatena.ne.jp/foosin/20090403/1238773016の挙動について質問してきた。 配列がスカラーで評価されてるとは思ってたけど、その理由と、perlがどう解釈してるかは分からなかった。 名前考えるのがめどかったのでfoosinでメインマシンから入室。や、…

空リストの評価が変だとか&&の意味とか

会社で、こんな挙動を見つけてる人がいた。 % perl -MData::Dumper -le 'my @x = (); @x = () && (); print Dumper \@x;' $VAR1 = [ undef ]; % perl -MData::Dumper -le 'my @x = (); @x = @x && (); print Dumper \@x;' $VAR1 = [ 0 ]; 配列がスカラーで評…

オーバーライドできない関数

Perl Cookbook 2ndより。 Not all reserved words have the same status. Those that return a negative number in the C-language keyword( ) function in the toke.c file in your Perl source kit may be overridden. Keywords that cannot be overridden…

オーバーライドできない関数

以前、CORE::GLOBAL::printをオーバーライドしようとして失敗した。今日、http://okwave.jp/qa1150465.htmlをみつけた。 v5.8.1の時点でオーバーライドできないものに defined,delete,do,else,elsif,eval,exists,for,foreach,format,glog,goto,grep,if,last,…