フリップフロップ
フリップフロップのように働く演算子 .. が話題になっている。
- http://naoya.g.hatena.ne.jp/naoya/20061222/1166754815
- http://blog.livedoor.jp/dankogai/archives/50720796.html
演算子が状態を持っているというのがすごいよね。
while (<DATA>) { if (/^3/../^5/) { print; } } __END__ 1111111111 2222222222 3333333333 4444444444 5555555555 6666666666 7777777777 8888888888 9999999999 1111111111 2222222222 3333333333 4444444444 5555555555 6666666666 7777777777 8888888888 9999999999 1111111111 2222222222 3333333333 4444444444 5555555555 6666666666 7777777777 8888888888 9999999999
実行結果です。/^3/がマッチした以降は/^3/../^5/は真であり続け、/^5/にマッチしたところで偽に戻る。…を繰り返す。
3333333333 4444444444 5555555555 3333333333 4444444444 5555555555 3333333333 4444444444 5555555555
追記:はてなブックマークでid:z0racさんが""が既に状態を持っているのだが、そう云うことではない? と書かれていましたが、そうではないです。1つのループ中に複数の ..演算子を入れれば、個別に状態管理されていることが分かります。以下を見てください。
while (<DATA>) { if (/^3/../^5/) { print; } if (/c$/../f$/) { print "\t$_"; } } __END__ 1111111111a 2222222222b 3333333333c 4444444444d 5555555555e 6666666666f 7777777777a 8888888888b 9999999999c 1111111111d 2222222222e 3333333333f 4444444444a 5555555555b 6666666666c 7777777777d 8888888888e 9999999999f 1111111111a 2222222222b 3333333333c 4444444444d 5555555555e 6666666666f 7777777777a 8888888888b 9999999999c
実行結果です。個別に状態管理している様子が読み取れると思います。
3333333333c 3333333333c 4444444444d 4444444444d 5555555555e 5555555555e 6666666666f 9999999999c 1111111111d 2222222222e 3333333333f 3333333333f 4444444444a 5555555555b 6666666666c 7777777777d 8888888888e 9999999999f 3333333333c 3333333333c 4444444444d 4444444444d 5555555555e 5555555555e 6666666666f 9999999999c