Perlの範囲演算子
Perlの(Rubyにも輸入されているが)範囲演算子(flip-flop演算子)は,どうもイモっぽくて使い辛い.なぜドット2個と3個の違いを,右オペランドを評価し始める位置の切り替えに使ってしまったのか.Rubyのクラス Range
のように終端点を含める/含めないの切り替えに使って欲しかった.
man perlop
によれば「範囲演算子は空文字列または整数を返すが,終端点だけは科学表記で "E0" を付けるので,終端点を除きたければそれで判断してくれ」とある.流石Perlらしくhackishな仕様だ...
この範囲演算子は
<html> <head> <title>Test</title> </head> <body> <h1>Test Doc</h1> <h2>Abstract</h2> <p>blah blah ...</p> <p>abracadabra</p> <h2>Theory</h2> <p>xyzzy</p> <p>boo foo woo</p> <h2>Conclusion</h2> <p>tim timney tim timney</p> <p>supercalifragilisticexpialidocious</p> </body> </html>
こういう構成の文書から "Theory" の節だけを抽出するのに使う:
$ perl -ne 'print if (/<h2>Theory/../<h2>Conclusion/)'
... のだが,実際に上のように書くと最後の1行として "<h2>Conclusion</h2>
" が表示されてしまうのだ! ムキー