camel

アルファギークでも知らなかったというのは、不思議でもあり当然のようでもあり。

naoyaグループ - naoyaの日記 - if /regexp/../regexp/
Perl で正規表現を .. すると、その間に含まれる文字列という意味でマッチさせられる。 % w3m -dump_source http://www.yahoo.com/ | perl -nle 'print if /^<style/../<\/style>/' とすると

これ、実に由緒正しい使い方で、たしかまだperlがhashすらサポートしていない頃からあったと記憶しています。なにしろsed/awkが起源ですから。

NAME operator - search.cpan.org
In scalar context, ".." returns a boolean value. The operator is bistable, like a flip-flop, and emulates the line-range (comma) operator of sed, awk, and various editors. Each ".." operator maintains its own boolean state.

もちろん、日本語のドキュメントもあります。

The Perl5 Manual - 範囲演算子
スカラコンテキストで使われたときには、".." はブール値を返します。この演 算子は、フリップフロップのように 2 値安定で、sed や awk や多くのエディタ での行範囲 (コンマ) 演算子をエミュレートするものとなります。

しかしこれを見て「こんなことまでできるのか、さすが変態言語」と言っているあなた、甘いです。以下をご覧下さい。

% GET http://www.yahoo.com/ | ruby -nle 'print if /^<style/../<\/style>/'
<style type="text/css">
a{color:#16387c;}
a:link,a:visited{text-decoration:none;}
a:hover{text-decoration:underline;}
<style type="text/css">
a{color:#16387c;}
a:link,a:visited{text-decoration:none;}
a:hover{text-decoration:underline;}
</style>
<style type="text/css" media="all">
#p{width:310px;}
form{margin:0;}
</style>
Rubyリファレンスマニュアル - 演算子式
条件式として範囲式が用いられた場合には、式1が真になるま では偽を返し、その後は式2が真を返すまでは真を返します。式2が 真になれば状態は偽に戻ります。..は式1が真になっ た時にすぐに式2を評価し(awkのように)、 ... は次の 評価まで式2を評価しません(sedのように)。

これを見てもまだ信じられない人は、以下を実行していましょう。

% ruby -e 'require "open-uri"; open(ARGV.shift).each{|l| puts l if (l=~/^<style/i)..(l=~/\/style>/i)}' http://www.yahoo.com/

「レンジでチン」ならぬ「レンジでちょんちょん(..)」ないし「ちょんちょんちょん(...)」って、手軽で便利ですが、こんなところでも使われているというお話でした。

Dan the Man with Too Many Languages to Speak