perlの最近のブログ記事

HTTP-MobileAgent-Plugin-Locatorを入れようとしたら、Geo::Coordinates::Converter::iAreaが必要だって注意されたので、G::C::C::iAreaを入れようとしたら、今度はCDB_Fileが必要だとのこと。

最新版の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
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
ちなみにfreeBSDのバージョンは4.11。
どうもハマリそうなんで、CDB_File-0.95に切り替えたら、すんなり入った。
CHANGESみたら

0.96    - Fix for compiling under stricter compilers
なんだよw
じゃあ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.conf
206行目
#LoadModule env_module         libexec/httpd/mod_env.so
コメントを外す
LoadModule env_module         libexec/httpd/mod_env.so
239行目
#LoadModule perl_module        libexec/httpd/libperl.so
コメントを外す
LoadModule perl_module        libexec/httpd/libperl.so
283行目
#AddModule mod_env.c
コメントを外す
AddModule mod_env.c
283行目
#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/hosts
127.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 shell
cpan> 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.conf
NameVirtualHost 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言語プログラミングレッスン入門編


新版Perl言語プログラミングレッスン入門編
結城浩
ソフトバンククリエイティブ (2006/10/21)
売り上げランキング: 6757
おすすめ度の平均: 5.0
5 次はRuby言語プログラミングレッスン入門編ですね
5 ウェブプログラミングの基礎を固める良書 奇跡の復刊


結城さんの説明は簡潔かつ、丁寧で分かり易い。基本的な事を抑えるだけでなく、実践的な使い方や、ちょっと踏み込んだコラムなど、嫉妬してしまう程に巧みに書かれています。Ruby本が出るのみ楽しみ。


・プログラミングPerl

プログラミングPerl〈VOLUME1〉
ラリー ウォール ジョン オーワント トム クリスチャンセン Larry Wall Jon Orwant Tom Christiansen 近藤 嘉雪
オライリー・ジャパン (2002/09)
売り上げランキング: 20782
おすすめ度の平均: 4.5
4 値段は高いけど・・・
5 CGIを自在にこなす第一歩の書
5 Perl文法の仕組みを詳細に知りたい人の本


ラリー・ウォールによるPerlのバイブル。通称ラクダ本。
708ページにものぼる名著。このボリュームで5000円なら安い方だと思う。




ラリーならではのジョークも楽しい。


・実用Perlプログラミング

実用Perlプログラミング
サイモン カズンズ Simon Cozens 菅野 良二
オライリージャパン (2006/03)
売り上げランキング: 35285
おすすめ度の平均: 5.0
5 Perlを深く知りたい方にはよい本です。

一歩踏み込んだPerlでの実装テクニックや、言語仕様など、色々なトピックが取り上げられています。
中級者向けの本なのかな?リファレンス、コンテキスト、型グロブ、オブジェクト指向プログラミング辺りのトピックは押さえておいた方が良さそう。


・Effective Perl (ASCII Addison Wesley Programming Series)

Effective Perl (ASCII Addison Wesley Programming Series)
ジョセフ・N. ホール ランドル・L. シュワォーツ Joseph N. Hall Randal L. Schwartz 吉川 邦夫
アスキー (1999/03)
売り上げランキング: 166326
おすすめ度の平均: 5.0
5 C互換でなく、perlらしい書き方をしたい人に
5 perl語を学ぶ
5 perl語を学ぶ

Perlプログラミングをする上でのTips的な事が書いてある。オライリーのHACKシリーズみたいな感じ。内容的は初級から中級辺りの内容を取り扱っている様子。読みやすい。

・Parl HACKS

Perl Hacks ―プロが教えるテクニック & ツール101選
chromatic Damian Conway Curtis "Ovid" Poe 株式会社ロングテール/長尾 高弘
オライリー・ジャパン (2007/01/23)
売り上げランキング: 90551
おすすめ度の平均: 5.0
5 Perl Hacker になるための一冊
5 アイディア本

オライリーの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

このアーカイブについて

このページには、過去に書かれたブログ記事のうちperlカテゴリに属しているものが含まれています。

前のカテゴリはOtherです。

次のカテゴリはproductです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.0

アドセンス

MoMAstore MoMAstore
MoMAstore MoMAstore
MoMAstore MoMAstore
MoMAstore MoMAstore
MoMAstore MoMAstore
MoMAstore
MoMAstore
MoMAstore
MoMAstore