Ruby/Oniguruma の副作用に気付きましたが、これは一見同等に見える 4 つのステートメントのうち 1 つにしか存在しません。変数が でday
定義されているのに、またはで定義され009
ていないのはなぜですか?003
005
007
irb(main):001:0> r = /(?<day>\d\d):(?<mon>\d\d)/
=> /(?<day>\d\d):(?<mon>\d\d)/
irb(main):002:0> r =~ "24:12"
=> 0
irb(main):003:0> day
NameError: undefined local variable or method `day'
irb(main):004:0> "24:12" =~ r
=> 0
irb(main):005:0> day
NameError: undefined local variable or method `day'
irb(main):006:0> "24:12" =~ /(?<day>\d\d):(?<mon>\d\d)/
=> 0
irb(main):007:0> day
NameError: undefined local variable or method `day'
irb(main):008:0> /(?<day>\d\d):(?<mon>\d\d)/ =~ "24:12"
=> 0
irb(main):009:0> day
=> "24"
注意事項 1: 4 つのケースすべてで同じ正規表現と同じ文字列です。
注 2: MS Windows と Ubuntu Linux での動作を確認しました。