小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

範囲演算子で範囲同値ケースでのRubyとPerlの比較

通常、Rubyの範囲演算子(..や...)は、オペランドを両端とするRangeオブジェクトを生成します。
ちなみに、ループ処理での範囲指定の場合は、『..』は右端を含み、『...』は含みません。


しかし、範囲同値ケースで範囲演算子を使用すると、Perlでのスカラーコンテキスト時と同じ振る舞いになるのです。
ちなみに、Perlでのスカラーコンテキスト時の振る舞いは、以下を参考のこと。

rubyでの『..』のサンプル(hani02.rb)

DATA.each do |s|
    if ((s =~ /START/) .. (s =~ /START/))
        print s
    end
end
__END__
START
aaa
bbb
START
ddd
eee
START
ggg
hhh
START
jjj
kkk

処理結果

C:\rubytest>ruby hani02.rb
START
START
START
START

rubyでの『...』のサンプル(hani03.rb)

DATA.each do |s|
    if ((s =~ /START/) ... (s =~ /START/))
        print s
    end
end
__END__
START
aaa
bbb
START
ddd
eee
START
ggg
hhh
START
jjj
kkk

処理結果

C:\rubytest>ruby hani03.rb
START
aaa
bbb
START
START
ggg
hhh
START

Perlでの『..』のサンプル(hani02.pl)

#!/usr/bin/perl
use strict;
use warnings;

while (<DATA>) {
    if ($_ =~ /START/ .. /START/) {
        print;
    }
}
__END__
START
aaa
bbb
START
ddd
eee
START
ggg
hhh
START
jjj
kkk

処理結果

C:\rubytest>perl hani02.pl
START
START
START
START

Perlでの『...』のサンプル(hani03.pl)

#!/usr/bin/perl
use strict;
use warnings;

while (<DATA>) {
    if ($_ =~ /START/ .. /START/) {
        print;
    }
}
__END__
START
aaa
bbb
START
ddd
eee
START
ggg
hhh
START
jjj
kkk

処理結果

C:\rubytest>perl hani03.pl
START
aaa
bbb
START
START
ggg
hhh
START