++Diary++


2001年9月の日記
2001年9月5日(水)
referenceの続き
2001年9月10日(月)
自動リンク
referenceの続き
前回の日記に書いたreferenceのことだが、たとえばファイルアップロードの際の、アップロードされたファイルの情報などを整理して利用するにはとても都合がいい。
だが、渡されるFORMのデータがmultipartでない場合にはあまり使い道がないのではと思った。その場合、FORMから渡されるデータはキーワードと値のペアという形でしか得られないからだ。

だがここでFORMのnameに複数のキーワードを設定すれば、1個目のキーワードを各キーとするハッシュのリストに、2個目のキーワードを各キーとするハッシュ(へのreference)が格納出来るのではないだろうか。

つまり具体的には、たとえば2つのキーワードを「_」で連結してFORMのnameに複数のキーワードを設定する。
そしてFORMから渡されたデータをデコードする際に以下のような処理をする。
if ($name =~ /^(\w+)_(\w+)$/) {
$FORM{$1}{$2} = $value;
}
こうすれば2個目のキーワードを各キーとするハッシュへのreferenceから成る、1個目のキーワードを各キーとするハッシュが生成出来るはずだ。

※実際に試して見たら上手く行ったのですが、もしも何か間違いがありましたらご指摘いただければ幸いです。
2001年9月5日(水)  No.10

自動リンク
CGIに関するリクエストで、「タグを使用しても自動リンクを有効にして欲しい」というのがあったので、スクリプトを書き換えることにした。
ここで早速Pattern Matchingのregex extensionsが使えるのではと嬉しくなった。
つまりLookaround Assertionsを使って「URLの前に「="」または「=」がなければ自動リンクする」というふうに書けばいいと思ったのだがこれがなかなか上手く行かない。URLの前に「"」がある場合のnegative lookbehindがどうしても想定した通りに動作しない。(つまり「"」がなくてもあってもmatchするようにするということが出来ないのである。)
あれこれ試して最終的には何とか上手く動くようになった。
この辺の処理がさっさと書けないのは、理論的な思考能力に欠けている所為かと思われ、少し悲しい。

※コードは以下のようになっています。もしも間違いに気付かれた方がありましたらお教え下さると嬉しいです。

$pre = eval{ qr/(?$descrip =~ s/$pre(http:\/\/[\w\.\~\-\/\?\&\+\=\#]+)/<A HREF=$1 TARGET=$target1>$1<\/A>/iog;

※Lookaround Assertionsを使用しているのでperl5.005以降でないと機能しないと思います。すみません。ただしeval関数を使用しているので、文法エラーにはならないと思いますが。
2001年9月10日(月)  No.11

No. PASS
 OR AND
スペースで区切って複数指定可能
++HOME++
[日記一覧]
shiromuku(fs2)DIARY version 1.40