if 式内の .. 演算子の使い方

kazeburo 氏のハテブを眺めていたら下記を発見
naoyaグループ - naoyaの日記 - if /regexp/../regexp/

隣の席の id:iwai2ug 氏とイロイロ調べてみて、下記の事が判明。

  1. 書式は、式1 .. 式2
  2. 式1 と 式2 は、正規表現である必要がない
  3. 式1 か 式2 が真なら、真
  4. 式1 が真になると、式2 が真になるまで、真
  5. 式毎に状態を管理している
use strict;
use warnings;

my $fixture = <<'__FIXTURE__';
name:cooldaemon
age:29
gender:man
I love perl, ruby and javascript.
__FIXTURE__

open my $fixture_fh, '<', ?$fixture;
while (<$fixture_fh>) {
  print if check_length($_, 7,) .. check_length($_, 11,);
  print if check_length($_, 7,) .. check_length($_, 11,);
  print if /^n/ .. /^g/;
}

sub check_length { length(shift(@_)) == shift(@_) ? 1 : 0 }

正規表現を使う必要はなく、式であれば、何を指定しても OK。
しかも、同じ if 式(上記の例では、「if check_length($_, 7,) .. check_length($_, 11,) 」)が複数存在していても、それぞれで状態が管理されている。←嘘かも(w。条件が異なる if 式毎に状態管理している点は確実だけど。

その後、小飼氏の BLOG で下記のような記事を見かける。
404 Blog Not Found - {perl,ruby} -nle 'print if /start/../end/'
へー・・・sedawk 由来なんだ・・・。
しかも、ruby で使えるとは・・・。