perlの最近のブログ記事
最新版のCDB_File-0.96をfreeBSDに入れようと思ったらmakeでこける
cc -c -DHAS_FPSETMASK -DHAS_FLOATINGPOINT_H -fno-strict-aliasing -pipe -I/usr/local/include -O -DVERSION=\"0.96\" -DXS_VERSION=\"0.96\" -DPIC -fPIC "-I/usr/local/lib/perl5/5.8.6/i386-freebsd/CORE" -DHASMMAP CDB_File.cちなみにfreeBSDのバージョンは4.11。
CDB_File.xs: In function `XS_CDB_File_FETCH':
CDB_File.xs:480: syntax error before `dlen'
CDB_File.xs:483: `dlen' undeclared (first use in this function)
CDB_File.xs:483: (Each undeclared identifier is reported only once
CDB_File.xs:483: for each function it appears in.)
*** Error code 1
どうもハマリそうなんで、CDB_File-0.95に切り替えたら、すんなり入った。
CHANGESみたら
なんだよw0.96 - Fix for compiling under stricter compilers
じゃあ0.95でいいや。
最近はまったのでメモ書き。
LeopardからApacheのバージョンが2.2.6になっています。
Tigerと違って、Apache1.3+mod_perlが標準ではないので、mod_perl2を自前で入れる必要があるんですね。
今の職場はPerlがメインのWeb開発なので、mod_perlないとお話にならないのですね。
が、普通にインストールすると、
Intel Macだと、アーキテクチャータイプが違うとかで起動してくれない。
(非インテルは未確認)
そこで、mod_perlを入れる際に、環境変数をいじる必要があります。
$ wget http://search.cpan.org/CPAN/authors/id/G/GO/GOZER/mod_perl-1.30.tar.gzmod_perl-1.30.tar.gz $ tar zxvf mod_perl-1.30.tar.gz $ cd mod_perl-1.30 $ export ARCHFLAGS="-arch x86_64" $ export CFLAGS="-arch x86_64" $ perl Makefile.PL $ make $ make install
デフォルトで入っているモジュールだけだと、make testでモジュールが足りないと怒られると思うので、エラーメッセージ見ながら追加してあげて下さい。
以前Sledgeについて書いたんですが、サンプルが無くて動作確認して無かったので、「まるごとPerl vol.1」のサンプルを使用して動かして見ました。
実際に動かしてみる際に以前の設定から変更した所があるので、再度エントリします。
Apacheの設定
まず、mod_perlを有効にします。また、apacheのSetEnvを使いたいので、mod_envも有効にしておきます。
$ sudo vi /etc/httpd/httpd.conf206行目 #LoadModule env_module libexec/httpd/mod_env.so コメントを外す LoadModule env_module libexec/httpd/mod_env.so239行目 #LoadModule perl_module libexec/httpd/libperl.so コメントを外す LoadModule perl_module libexec/httpd/libperl.so283行目 #AddModule mod_env.c コメントを外す AddModule mod_env.c283行目 #AddModule mod_perl.c コメントを外す AddModule mod_perl.c
Sledgeでは、アプリケーション毎にサブドメインを切るのが王道なので、http://localhost/bbsではなくて、http://bbs.localhost/としたい。Apacheのvirtualhostを使えばいいのだが、localhostにサブドメインを加える場合、/etc/hostsの127.0.0.1とサブドメインを紐づける必要があります。
$ sudo vi /etc/hosts127.0.0.1 localhost の後ろにサブドメイン追加 127.0.0.1 localhost bbs.localhost
あとはVirtualHostの設定ですが、アプリの配置を終えた後に設定します。
Sledgeの導入
Sledgeの公式ページからダウンロード出来ますが、プラグインや追加モジュールが沢山あるので、下記SorceForgeのCVSから丸ごととってきた方がいいです。
http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/sledge/
画面の下の方にDownload tarbollというリンクがあるので、ここから落とします。(CVSでチェックアウトしてもいいです)
tarbollを解凍すると、Slege本体と追加モジュール、プラグインが沢山できますが、全部入れなくても良いです。必要に応じて追加しましょう。(その都度書こうかと思います)
まずはSledgeの導入です。以前書いた内容とちょっとだけ変わります。SledgeはCPANモジュールを多用していますので、始めにモジュールを追加しておきます。
$ sudo perl cpan_install.pl
今回のサンプルでは、Class::DBIやTime::Pieceを使っていますので、追加しておきます。他にも環境によって足りないモジュールがあるかも知れません。httpのエラーログに足りないモジュールがあった場合はログがかかれますので、もしあれば同様に追加して下さい。
$ sudo perl -MCPAN -e shellcpan> install Class::DBI cpan> install Time::Piece
モジュール導入が終わったら、Sledgeのインストールです。
$ perl Makefile.PL $ make; make test; $ sudo make install
make testは念の為です。あんまり気にしてません。勉強中なもので・・(ノ´∀`*)
アプリの配置とApacheの設定
まるごとPerl vol.1のサポートページからモジュールをダウンロードします。
何処に置くかは任意ですが、今回は/Users/Sledgeに配置。
この設定はアプリ作る度さわることになるので、/etc/httpd/users/virtualhost.confに切り出しておきました。
$ sudo vi /etc/httpd/users/virtualhost.confNameVirtualHost 127.0.0.1 <virtualhost bbs.localhost> ServerName bbs.localhost DocumentRoot /Users/Sledge/bbs/htdocs SetEnv PERL5LIB /Users/Sledge/bbs/lib PerlSetEnv PERL5LIB /Users/Sledge/bbs/lib <location> SetHandler perl-script PerlHandler Apache::Registry </location> <directory /users/sledge/bbs/htdocs> DirectoryIndex index.cgi index.html AddHandler cgi-script .cgi Options +ExecCGI Order deny,allow Allow from all </directory> </virtualhost>
設定はそれぞれの環境次第ではありますが、とりあえずコレで動きました。
もう少し色々試して見たい所ではあります。
mod_alias辺りは、他の設定次第で、違うところ見に行ったりします。
ちなみに、SledgeのサンプルはSorceforgeから落としたtarballの中にも3つ程あるので、参考に動かしてみてはいかがでしょう?
shopcartがオススメです。
Perl勉強するのに購入した本達。
・新版Perl言語プログラミングレッスン入門編
ソフトバンククリエイティブ (2006/10/21)
売り上げランキング: 6757

次はRuby言語プログラミングレッスン入門編ですね
ウェブプログラミングの基礎を固める良書 奇跡の復刊結城さんの説明は簡潔かつ、丁寧で分かり易い。基本的な事を抑えるだけでなく、実践的な使い方や、ちょっと踏み込んだコラムなど、嫉妬してしまう程に巧みに書かれています。Ruby本が出るのみ楽しみ。
・プログラミングPerl
オライリー・ジャパン (2002/09)
売り上げランキング: 20782

値段は高いけど・・・
CGIを自在にこなす第一歩の書
Perl文法の仕組みを詳細に知りたい人の本ラリー・ウォールによるPerlのバイブル。通称ラクダ本。
708ページにものぼる名著。このボリュームで5000円なら安い方だと思う。
ラリーならではのジョークも楽しい。
・実用Perlプログラミング
オライリージャパン (2006/03)
売り上げランキング: 35285

Perlを深く知りたい方にはよい本です。一歩踏み込んだPerlでの実装テクニックや、言語仕様など、色々なトピックが取り上げられています。
中級者向けの本なのかな?リファレンス、コンテキスト、型グロブ、オブジェクト指向プログラミング辺りのトピックは押さえておいた方が良さそう。
・Effective Perl (ASCII Addison Wesley Programming Series)
アスキー (1999/03)
売り上げランキング: 166326

C互換でなく、perlらしい書き方をしたい人に
perl語を学ぶ
perl語を学ぶPerlプログラミングをする上でのTips的な事が書いてある。オライリーのHACKシリーズみたいな感じ。内容的は初級から中級辺りの内容を取り扱っている様子。読みやすい。
・Parl HACKS
オライリー・ジャパン (2007/01/23)
売り上げランキング: 90551

Perl Hacker になるための一冊
アイディア本オライリーのHACKシリーズ。
Parlに関するTips集。HACKシリーズ全般に言えることだが、ちょこっとずつ読めるのが良い。
自分の為のPerlメモ
Perlの正規表現アレコレ。忘れそうだから。
1: URLを正規表現で引っかける
URLを正規表現で書くと
/http:¥/¥/www¥.hackmylife¥.jp¥//
見たいに凄く読みづらくなる。
そんなときはmオプションで正規表現の//を変更できる。
m|http://www¥.hackmylife¥.jp/| とか、 m#http://www¥.hackmylife¥.jp/# とか m?http://www¥.hackmylife¥.jp/?
アラ便利
でも"."はエスケープしないといけないのが嫌。
そんなときは¥Q,¥Eで囲むといい。
m|¥Qhttp://www.hackmylife.jp/¥E|
こりゃ便利
2: マッチ式を複数行に
マッチ式に()が多いと読みづらい。そんなときは複数行で書ける/xオプション
$str =〜 /((\d+)([A-Za-z]*))
はこうも書ける
$str =〜 / ( ( \d+ ) ( [A-Za-z]* ) )/x
まぁ、便利。
あんまり見たこと無いけど、Perlでは普通なのかしら?
3: 式を評価(eval的な・・)
正規表現の中でPerlの式を評価するのはeオプション
my $str = "hallo world" $str =〜 s/\w+/ucfirst($&)/eg print $str
↓ Hallo World
おお、便利。
ucfirstは単語の先頭文字を大文字に変換。
まとめ: 正規表現修飾子
正規表現で使える修飾子
| 修飾子 | 意味 |
|---|---|
| /g | 繰り返しパターンマッチを行う globalのg |
| /e | 置換後の文字をPerl式として扱う evaluateのe |
| /i | 大文字、小文字の違いを無視 ignoreのi |
| /o | 変数を含んだ正規表現を使う場合、その変数が変化しないなら、前回の処理内容を再利用(高速化する) compile onceのo |
| /s | 文字列を1行として扱う single lineのs メタ文字.が改行にもマッチする |
| /m | 文字列を複数行として扱う multiple lineのm メタ文字^や$が行単位で扱われる |
| /x | 空白や改行、コメントを無視する スペースは\を付ける必要がある extendのx |




















