範囲演算子で範囲同値ケースでの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