Почему оператор = ~ только иногда имеет побочные эффекты?

Я заметил побочный эффект в Ruby / Oniguruma, который присутствует только в 1 из 4, казалось бы, эквивалентных утверждений. Почему переменная день определена в 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"

] nb # 1: это одно и то же регулярное выражение и одна и та же строка во всех четырех случаях.

nb # 2: Я проверил поведение в MS Windows и Ubuntu Linux.

12
задан Staffan Nöteberg 25 May 2011 в 12:51
поделиться