I'm seeing strange behavior with Ruby 1.8 when I try to evaluate a
regular expression inside an eval block.
Consider the following:
puts '1' =~ /^[\d]+$/
>> outputs "0" to the terminal
eval %Q{'1' =~ /^[\d]+$/}
>> outputs "nil" to the screen
Could someone explain why the eval statement returns an incorrect result
for the regexp match? Thanks...
···
--
Posted via http://www.ruby-forum.com/ .
It works if you escape the \ with \\ :
eval %Q{'1' =~ /^[\\d]+$/}
=> 0
Not sure why the \ must be escaped into a block code.
···
El Jueves, 29 de Enero de 2009, Barun Singh escribió:
I'm seeing strange behavior with Ruby 1.8 when I try to evaluate a
regular expression inside an eval block.
Consider the following:
puts '1' =~ /^[\d]+$/
>> outputs "0" to the terminal
eval %Q{'1' =~ /^[\d]+$/}
>> outputs "nil" to the screen
Could someone explain why the eval statement returns an incorrect result
for the regexp match? Thanks...
--
Iñaki Baz Castillo
Iñaki Baz Castillo wrote:
···
El Jueves, 29 de Enero de 2009, Barun Singh escribió:
>> outputs "nil" to the screen
Could someone explain why the eval statement returns an incorrect result
for the regexp match? Thanks...
It works if you escape the \ with \\ :
eval %Q{'1' =~ /^[\\d]+$/}
=> 0
Not sure why the \ must be escaped into a block code.
Ah, thanks that worked. I wonder why extra escaping is needed just
because it's in a block...
--
Posted via http://www.ruby-forum.com/\ .
Barun Singh wrote:
Iñaki Baz Castillo wrote:
>> outputs "nil" to the screen
Could someone explain why the eval statement returns an incorrect result
for the regexp match? Thanks...
It works if you escape the \ with \\ :
eval %Q{'1' =~ /^[\\d]+$/}
=> 0
Not sure why the \ must be escaped into a block code.
Ah, thanks that worked. I wonder why extra escaping is needed just
because it's in a block...
It's not in a block, it's just inside a string. There are two types of
string quoting, normally given using double-quotes and single-quotes,
and they behave differently with regards to escaping. The double-quote
variety converts special sequences like \n to newline, and \d just
becomes d.
irb(main):001:0> puts %Q{'1' =~ /^[\d]+$/}
'1' =~ /^[d]+$/
=> nil
irb(main):002:0> puts %q{'1' =~ /^[\d]+$/}
'1' =~ /^[\d]+$/
=> nil
irb(main):003:0> puts %Q{\n}
=> nil
irb(main):004:0> puts %q{\n}
\n
=> nil
···
El Jueves, 29 de Enero de 2009, Barun Singh escribió:
--
Posted via http://www.ruby-forum.com/\ .
Robert_K1
(Robert K.)
29 January 2009 12:55
5
It's not a block - it's a doubly quoted string!
Ruby version 1.8.7
irb(main):001:0> %Q{foo}
=> "foo"
irb(main):002:0> %Q{foo}.class
=> String
irb(main):003:0> %Q{foo\\no}
=> "foo\\no"
irb(main):004:0> %Q{foo\no}
=> "foo\no"
irb(main):005:0> puts %Q{foo\no}
foo
o
=> nil
irb(main):006:0> puts %Q{foo\\no}
foo\no
=> nil
Kind regards
robert
···
2009/1/29 Barun Singh <barunio@gmail.com>:
Iñaki Baz Castillo wrote:
El Jueves, 29 de Enero de 2009, Barun Singh escribió:
>> outputs "nil" to the screen
Could someone explain why the eval statement returns an incorrect result
for the regexp match? Thanks...
It works if you escape the \ with \\ :
eval %Q{'1' =~ /^[\\d]+$/}
=> 0
Not sure why the \ must be escaped into a block code.
Ah, thanks that worked. I wonder why extra escaping is needed just
because it's in a block...
--
remember.guy do |as, often| as.you_can - without end