2007年8月アーカイブ

自分の為の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

Macの/etc配下を見ていて、ふと気がつきました。
デフォルトで postfixが入っている!!

他にもデフォルトで、apacheも入っているし。
viは勿論、emacsもデフォルトで居るし(生粋のemacsでは無いらしいが・・)
デフォルトはbashだけど、zshも元々から居た気がする。
DBが入っていたら更に凄いなぁ。

10.5からはデフォルトでRailsが入るので、MySQLがはいるのでしょーか?( ・ω・)モニュ?

なにげにフルスタック何じゃないかと思った。

perlのフレームワークでといえばCatalystですが、もう一つ有名な国産フレームワークSledgeをMacで使えるようにしてみたいと思います。

Sledgeはライブドアで開発されたWebフレームワークです。作者はmiyagawaさん。
特徴は、

  • MVCフレームワーク
  • 容易に拡張可能なプラグインアーキテクチャ
  • MySQLやPostgreSQL等を利用したセッション管理
  • フックによる拡張機能
  • <ページコンポーネントやアクション単位での認証/li>
  • CPANモジュールを利用することによる高い信頼性
  • ライブドアのサービスを含む多くの商用サイトでの実績

となっています。機能は追々見てゆくとして、まずはインストール。

Apache + mod_perlを動くようにする

SledgeはApaceh上で動きます。cgiかmod_perlが使える状態にしなければなりません。
MacOSX 10.4にはデフォルトでApacheが入っているかチェック。

$ which httpd
/usr/sbin/httpd

おお、すばらしぃ。問題はバージョン。mod_perlとApache2.x系は昔から相性が悪いとひょうばんなので、できれば1.3系で穏便に行きたいところ。

$ httpd -v
Server version: Apache/1.3.33 (Darwin)
Server built: Jan 13 2006 08:49:59

なんだ、全然問題無いじゃん。あとはmod_perlの導入。
これまた、MacOSX 10.4にはmod_perlがデフォで入っているので、httpd.confで有効にしてあげれば良い。

$ sudo vi /etc/httpd/httpd.conf
239行目 #LoadModule perl_module libexec/httpd/libperl.so のコメントを外す LoadModule perl_module libexec/httpd/libperl.so
283行目 #AddModule mod_perl.c もコメントを外す AddModule mod_perl.c

最後の方に下記を追加

<IfModule mod_alias.c>
  Alias /perl/ /Library/WebServer/Documents/app/
  Alias /cgi-perl/ /Library/WebServer/Documents/app/
</IfModule>
<IfModule mod_perl.c> <Location /perl> SetHandler perl-script PerlHandler Apache::Registry Options ExecCG PerlSendHeader On </Location> <Location /cgi-perl> SetHandler perl-script PerlModule Apache PerlHandler Apache::PerlRun Options ExecCGI PerlSendHeader On </Location> <Files */nph-*> PerlSendHeader Off </Files> </IfModule>

IfModuleのmod_aliasはデフォルトで定義されているので、そこに混ぜても良いでしょう。

httpd.confの文法をチェックします。

$ sudo /usr/sbin/apachectl configtest
Syntax OK

問題なければhttpdの再起動

$ sudo /usr/sbin/apachectl restart
/usr/sbin/apachectl restart: httpd restarted

設定変えるだけでOKでした。

Sledgeのインストール

SourceforgeのSledgeのページからダウンロードしておきます。
最新版はv1.11です。

次にCPANから必要なモジュールをインストールしておきます。

$ sudo perl -MCPAN -e 'install Bundle::Sledge'

結構モジュール数が多いので時間かかります。
終わったら、Sledgeのインストール。
Sledgeを解答したディレクトリに移り、make installします。

$ perl Makefile.PL
$ make
$ make test
$ sudo make install

CPANからインストールしたモジュールが足りないと、make testでエラーになる場合がありますので、
適宣手動でインストールします。
なにがインストールされるかは、eg/prereq-modulesに書いてあります。

参考にさせて頂いたサイト
http://www.thinkit.co.jp/free/tech/9/1/1.html

アドセンス

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