if 式内の .. 演算子の使い方
kazeburo 氏のハテブを眺めていたら下記を発見
naoyaグループ - naoyaの日記 - if /regexp/../regexp/
隣の席の id:iwai2ug 氏とイロイロ調べてみて、下記の事が判明。
- 書式は、式1 .. 式2
- 式1 と 式2 は、正規表現である必要がない
- 式1 か 式2 が真なら、真
- 式1 が真になると、式2 が真になるまで、真
- 式毎に状態を管理している
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/'
へー・・・sed、awk 由来なんだ・・・。
しかも、ruby で使えるとは・・・。