1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
def test1
p self
/(b)/ =~ "b"
puts "group: #$1"
str = 'abc'
result = str.gsub!(/(.)/) { |*args|
puts '-- in block --'
puts "args: #{args.inspect}"
puts "self: #{self.inspect}"
puts "group: #{$1.inspect}"
'Z'.gsub!(/(.)/) {
puts "inner group: #{$1.inspect}"
}
puts "group: #{$1.inspect}"
#break 'goo'
}
puts '--------------'
puts "result: #{result.inspect}"
puts "str: #{str.inspect}"
puts "group: #{$1.inspect}"
end
def owner
/(x)/ =~ "x"
$p = Proc.new {
p $1
}
$q = Proc.new {
p $1
}
end
# $~ is set in the current scope, not in the block's scope
def test2
owner
'y'.gsub!(/(.)/, &$p)
$q.call
p $1
end
def test3
owner
p 'y'.gsub!(/(.)/) { break 'foo' }
p $1
z = 'z'
# doesn't check frozen strings before return:
z.freeze
p z.gsub!(/(.)/) { puts 'goo'; break 'foo' }
p $1
# saves $~ on unsuccessful match:
"x".gsub!(/(y)/) { puts 'unreachable'; }
p $~
end
def test4
# returns nil on no match:
p "x".gsub!(/(x)/) { 'x' }
p "y".gsub!(/(x)/) { 'x' }
end
puts '-1-'
test1
puts '-2-'
test2
puts '-3-'
test3
puts '-4-'
test4
puts '---'
def def_lambda
$lambda = lambda { |*| return 'ok' }
end
def_lambda
"a".gsub!(/(a)/, &$lambda) rescue puts $!
|