He notado un efecto secundario en Ruby/Oniguruma que solo está presente en 1 de 4 afirmaciones aparentemente equivalentes. ¿Por qué la variable day
se define en 009
, pero no en 003
, 005
o 007
?¿Por qué el operador = ~ solo a veces tiene efectos secundarios?
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: Es la misma expresión regular y la misma cadena en los cuatro casos.
nb # 2: He verificado el comportamiento en MS Windows y Ubuntu Linux.
Nota: aunque este no es el caso aquí, debe tener cuidado cuando juegue con variables locales en IRb. Pueden comportarse de forma ligeramente diferente en IRb que en un script, debido a la forma en que el código se evalúa en IRb. Siempre escriba scripts para confirmar. –
Buen punto, Jörg. –