[kansaipm] Re: DocBook

mishima at momo.so-net.ne.jp mishima at momo.so-net.ne.jp
Sat Oct 7 07:04:49 CDT 2000


三嶋です。こんにちは。

> むとう@おうちです.いま好き好きDocBook病にかかっています.
> 
> で,こんな嫌んなコードがあるんですけど,皆さんならどうします?
>   # 論理構造を記述するためには使ってはいけない
>   s#\\begin\{center\}##g;
>   s#\\end\{center\}##g;
>   s#\\begin\{frameenv\}##g;
>   s#\\end\{frameenv\}##g;
>   s#\\begin\{minipage\}##g;
>   s#\\end\{minipage\}##g;

DocBook てのがどういうのか、よくわからないんですが、
要するにバックスラッシュがやだってことなんですよね。

    (If a curly bracket occurs in any other context, it is treated as a
    regular character.) The "*" modifier is equivalent to `{0,}', the "+"
    ...

と、perldoc perlop に書いてありますので、まず{}の前の\は取りましょう。

# (1)
  s#\\begin{center}##g;
  s#\\end{center}##g;
  s#\\begin{frameenv}##g;
  s#\\end{frameenv}##g;
  s#\\begin{minipage}##g;
  s#\\end{minipage}##g;

ちょっとマシになりました。
取り除くべきパターンが、ホントにこの6個だけなら、
1行にまとめて書けそうです。
まとめたほうが、少しは速いかな?

# (2)
  s#\\(begin|end){(center|frameenv|minipage)}##g;

但し、(...)を使うと$1や$2に値がセットされるため、些細なオーバーヘッドが
あります。(?:...)を使えば、ほんの少し読みにくくなりますが、そのオーバー
ヘッドがなくなる分、ほんの少し速くなるかもしれません。

# (3)
  s#\\(?:begin|end){(?:center|frameenv|minipage)}##g;

あとは、/x のオプションを使って、正規表現の途中に改行やコメントなどを
入れる手もあります(その場合、区切り文字は # 以外にするように)。
しかし、結局この程度のものなら、(1)で止めとくのが一番いいかな。(^^)

--
$p='Perl'; $_='Masahiro Mishima'; sub _{pack'c*',$x=110+ at _*5,$x+1}
tr/oma/fa_/;s/./chr(ord($&)+2)/ge;@x=(sort(grep{!$_{$_}++}split//),
$p=~/(.(..).)/);$x[7]=~s/^/_/e;$x[8].=_ 1;for(@w=(47,1639,8,31259))
{s/\d/$x[$&+1]/g} print ucfirst "@w.\n";





More information about the Kansai-pm mailing list