[kansaipm] Re: DocBook again

mishima at momo.so-net.ne.jp mishima at momo.so-net.ne.jp
Sat Oct 7 11:31:02 CDT 2000


三嶋です。

From: Takeshi MUTOH <mutoh at info.nara-k.ac.jp>
Subject: [kansaipm] DocBook again
Date: Sat, 07 Oct 2000 23:08:42 +0900

> 例えば,
> 	<h1>hoge</h1>
> を<title>hoge</title>に変換したければ,
> 	s#<h1>(.*)</h1>#<title>$1</title>#;
> とかしますよね.が,世間の人はそんな書き方してくれなくて
> 	<h1>
> 	 hgoe
> 	</h1>
> という行指向だといやんなことって結構在りますよね?
> 
> そんなとき便利なモジュールとかありませんか?
> #ちからわざでループ回しゃ書けるんだけど…

定番のやりかたがあります。別にモジュールは要らんです。
(1)ファイルの内容全体を $_ に読み込んで、
(2)「.」が改行文字にもマッチするように
すれば良いでしょう。

undef $/;	# (1)入力レコードの区切り文字を未定義にする
while(<>){	# すると、1ファイル毎に1回だけループする
    s#<h1>(.*?)</h1>#<title>$1</title>#s;	# (2) /s オプションがミソ
}

# ひそかに、(.*)を(.*?)に変えたのは、
# <h1>foo</h1> ... <h1>bar</h1> のときに、
# <title>foo</h1> ... <h1>bar</title> とならずに
# <title>foo</title> ... <title>bar</title> となるようにするためです。

なお、$/ については、perldoc perlvar を
/s と *? については、perldoc perlre で確認してください。

--
$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