diff --git a/string.c b/string.c
index 59c44ca..67d11bc 100644
--- a/string.c
+++ b/string.c
@@ -4663,6 +4663,7 @@ rb_str_sub_bang(int argc, VALUE *argv, VALUE str)
 	    p = RSTRING_PTR(str); len = RSTRING_LEN(str);
 
             if (iter) {
+                match0 = rb_funcallv(pat, rb_intern("match"), 1, &str);
                 repl = rb_obj_as_string(rb_yield(match0));
             }
             else {
diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb
index a012d84..3cc1dd7 100755
--- a/tool/rbinstall.rb
+++ b/tool/rbinstall.rb
@@ -474,7 +474,7 @@ def CONFIG.[](name, mandatory = false)
   postbatch << ">,\n}\n"
   postbatch.gsub!(/(?=\n)/, ' #')
   install_recursive(File.join(srcdir, "bin"), bindir, :maxdepth => 1) do |src, cmd|
-    cmd = cmd.sub(/[^\/]*\z/m) {|n| RbConfig.expand(trans[n])}
+    cmd = cmd.sub(/[^\/]*\z/m) {|n| RbConfig.expand(trans[n.to_s])}
 
     shebang, body = open(src, "rb") do |f|
       next f.gets, f.read
