# /(?\<foo\>...)/ =~ str assigns foo

**URL:** <https://www.ruby-forum.com/t/foo-str-assigns-foo/123104>\
**Category:** Development\
**Created:** [December 14, 2007, 12:40am UTC](https://www.ruby-forum.com/t/foo-str-assigns-foo/123104 "2007-12-14T00:40:35Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [December 14, 2007, 12:40am UTC](https://www.ruby-forum.com/t/foo-str-assigns-foo/123104/1 "2007-12-14T00:40:35Z")

</div>

e$B0J2\<$N$h$&$Ke(B named capture e$B$N7k2L$r\<+F0E\*$KJQ?t$KBeF~$5$;$?e(B  
e$B$$$N$G$9$,$I$&$G$7$g$&$+!#e(B

% ./ruby -e ’  
/(?\w+)/ =~ " foo "  
p word  
’  
“foo”

e$BBeF~$,5/$3$k\>r7o$O!"e(Bnamed capture e$B$r4^$\_!“e(B#{}  
e$B$J$I$K$h$kF0E\*e(B  
e$B$JE83+$N4^$^$l$F$$$J$$@55,I=8=$,e(B =~ e$B$N:8JU$K%j%F%i%k$H$7$FI=e(B  
e$B$l$?$H$-!”$G$9!#e(B

e$B$J$\*!"%^%C%A$7$J$+$C$?\>l9g$Oe(B nil  
e$B$rBeF~$9$k$h$&$K$7$F$$$^$9!#e(B

# Index: parse.y

— parse.y (revision 14215)  
+++ parse.y (working copy)  
@@ -442,6 +442,8 @@ static void reg\_fragment\_setenc\_gen(stru  
#define reg\_fragment\_setenc(str,options)  
reg\_fragment\_setenc\_gen(parser, str, options)  
static void reg\_fragment\_check\_gen(struct parser\_params\*, VALUE, int);  
#define reg\_fragment\_check(str,options) reg\_fragment\_check\_gen(parser,  
str, options)  
+static NODE _reg\_named\_capture\_assign\_gen(struct parser\_params_ parser,  
VALUE regexp, NODE _match);  
+#define reg\_named\_capture\_assign(regexp,match)  
reg\_named\_capture\_assign\_gen(parser,regexp,match)  
 #else  
 #define remove\_begin(node) (node)  
 #endif /_ !RIPPER _/  
@@ -2127,6 +2129,9 @@ arg : lhs ‘=’ arg  
{  
/_%%%\*/  
$$ = match\_op($1, $3);

- 

```
                   if (nd_type($1) == NODE_LIT && TYPE($1->nd_lit) 

```

== T\_REGEXP) {

- 

```
                       $$ = reg_named_capture_assign($1->nd_lit, 

```

$$);

- 

```
                   }
   /*%
 $$ = dispatch3(binary, $1, ripper_intern("=~"), $3);
   %*/

```

@@ -8450,6 +8455,73 @@ reg\_fragment\_check\_gen(struct parser\_par  
}  
}

+typedef struct {

- struct parser\_params\* parser;
- rb\_encoding \*enc;
- NODE \*succ\_block;
- NODE \*fail\_block;
- int num;  
+} reg\_named\_capture\_assign\_t;
- 

+static int  
+reg\_named\_capture\_assign\_iter(const OnigUChar \*name, const OnigUChar  
\*name\_end,

- 

```
     int back_num, int *back_refs, OnigRegex regex, void *arg0)

```

+{

- reg\_named\_capture\_assign\_t _arg =  
(reg\_named\_capture\_assign\_t_)arg0;
- struct parser\_params\* parser = arg-\>parser;
- 
- arg-\>num++;
- 
- if (arg-\>succ\_block == 0) {
- 

```
   arg->succ_block = NEW_BEGIN(0);

```

- 

```
   arg->fail_block = NEW_BEGIN(0);

```

- }
- 
- ID var = rb\_intern3((const char \*)name, name\_end-name, arg-\>enc);
- arg-\>succ\_block = block\_append(arg-\>succ\_block,
- 

```
   newline_node(node_assign(assignable(var,0),

```

- 

```
       NEW_CALL(

```

- 

```
         gettable(rb_intern("$~")),

```

- 

```
         rb_intern("[]"),

```

- 

```
         NEW_LIST(NEW_LIT(ID2SYM(var))))

```

- 

```
       )));

```

- arg-\>fail\_block = block\_append(arg-\>fail\_block,
- 

```
   newline_node(node_assign(assignable(var,0), NEW_LIT(Qnil))));

```

- return 0;  
+}
- 

+static NODE \*  
+reg\_named\_capture\_assign\_gen(struct parser\_params\* parser, VALUE  
regexp, NODE \*match)  
+{

- reg\_named\_capture\_assign\_t arg;
- 
- arg.parser = parser;
- arg.enc = rb\_enc\_get(regexp);
- arg.succ\_block = 0;
- arg.fail\_block = 0;
- arg.num = 0;
- onig\_foreach\_name(RREGEXP(regexp)-\>ptr,  
reg\_named\_capture\_assign\_iter, (void\*)&arg);
- 
- if (arg.num == 0)
- 

```
   return match;

```

- 
- return
- 

```
   block_append(

```

- 

```
       newline_node(match),

```

- 

```
       NEW_IF(gettable(rb_intern("$~")),

```

- 

```
           block_append(

```

- 

```
               newline_node(arg.succ_block),

```

- 

```
               newline_node(

```

- 

```
                   NEW_CALL(

```

- 

```
                     gettable(rb_intern("$~")),

```

- 

```
                     rb_intern("begin"),

```

- 

```
                     NEW_LIST(NEW_LIT(INT2FIX(0)))))),

```

- 

```
           block_append(

```

- 

```
               newline_node(arg.fail_block),

```

- 

```
               newline_node(

```

- 

```
                   NEW_LIT(Qnil)))));

```

+}  
+  
static VALUE  
reg\_compile\_gen(struct parser\_params\* parser, VALUE str, int options)  
{

---

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [December 14, 2007, 9:35am UTC](https://www.ruby-forum.com/t/foo-str-assigns-foo/123104/2 "2007-12-14T09:35:23Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:32588] /(?…)/ =~ str assigns foo”  
on Fri, 14 Dec 2007 08:38:56 +0900, Tanaka A. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
writes:

|e$B0J2\<$N$h$&$Ke(B named capture e$B$N7k2L$r\<+F0E\*$KJQ?t$KBeF~$5$;$?e(B  
|e$B$$$N$G$9$,$I$&$G$7$g$&$+!#e(B

e$B$(!\<!“$I$&$J$s$@$m$&$J$”!#e(B

|% ./ruby -e ’  
|/(?\w+)/ =~ " foo "  
|p word  
|’  
|“foo”  
|  
|e$BBeF~$,5/$3$k\>r7o$O!"e(Bnamed capture e$B$r4^$\_!“e(B#{} e$B$J$I$K$h$kF0E_e(B  
|e$B$JE83+$N4^$^$l$F$$$J$$@55,I=8=$,e(B =~ e$B$N:8JU$K%j%F%i%k$H$7$FI=e(B  
|e$B$l$?$H$-!"$G$9!#e(B  
|  
|e$B$J$_!”%^%C%A$7$J$+$C$?\>l9g$Oe(B nil e$B$rBeF~$9$k$h$&$K$7$F$$$^$9!#e(B

e$B$3$N;EMM$=$N$b$N$O@09g@-$H9gM}@-$O$"$k$H;W$$$^$9!#$=$NE@$OG’e(B  
e$B$a$k$N$G$9$,!"e(B

- e$B:#$^$G$$$o$f$kBeF~0J30$G%m!\<%+%kJQ?t$,EP\>l$9$kJ8K!$O%V%m%Ce(B  
e$B%/%Q%i%a!\<%?$7$+$J$/!“?7$7$$$b$N$rF3F~$9$k$N$ODq93$,$”$ke(B  
e$B$N$G$O$J$$$+!#$7$+$7!"8\_49@-$NLdBj$O$J$$$N$G!"MW$9$k$K47e(B  
e$B$l$@$1$NLdBj$H$$$&5$$b$9$k!#e(B

- e$B$“$kJQ?t$,%m!\<%+%kJQ?t$+L50z?t$N%a%=%C%I8F$S=P$7$+$r6hJLe(B  
e$B$9$k$N$,$d$d:$Fq$K$J$k$N$G$O$J$$$+!#$7$+$7!”:#$G$bJ8;zNse(B  
e$BCf$N\<0E83+$NFbIt$KBeF~$,$“$l$P%j%F%i%kFb$b%A%'%C%/$9$kI,e(B  
e$BMW$,$”$k$N$G!"05E]E\*$K:$Fq$K$J$k$H$^$G$O8@$($J$$$h$&$J5$e(B  
e$B$b$9$k!#e(B

e$B$H$$$&$o$1$G!"B(7h$G$-$^$;$s!#FC$K%m!\<%+%kJQ?t$NH=JL$,Fq$7$/e(B  
e$B$J$ke(B(e$B$+$b$7$l$J$$e(B)e$B$N$O7|G0$G$9!#%?%$%\_%s%0$r9M$($k$He(B1.9.1e$B$KF3e(B  
e$BF~$9$k$N$OFq$7$$$+$b!#e(B

```
                            e$B$^$D$b$He(B e$B$f$-$R$me(B /:|)

```

---

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [December 14, 2007, 10:19am UTC](https://www.ruby-forum.com/t/foo-str-assigns-foo/123104/3 "2007-12-14T10:19:52Z")

</div>

In article [E1J34q8-00027E-EF@localhost](mailto:E1J34q8-00027E-EF@localhost),  
Yukihiro M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

> e$B$(!\<!“$I$&$J$s$@$m$&$J$”!#e(B

e$B$A$J$\_$K!"$3$l$O:rF|:#F|$G;W$$IU$$$?$b$N$G$O$J$/!"0JA0$+$i$=e(B  
e$B$&$7$?$$$H9M$($F$$$k$b$N$G$9!#e(B[ruby-dev:20725] e$B$H$+!#e(B

> - e$B:#$^$G$$$o$f$kBeF~0J30$G%m!\<%+%kJQ?t$,EP\>l$9$kJ8K!$O%V%m%Ce(B  
> e$B%/%Q%i%a!\<%?$7$+$J$/!“?7$7$$$b$N$rF3F~$9$k$N$ODq93$,$”$ke(B  
> e$B$N$G$O$J$$$+!#$7$+$7!"8\_49@-$NLdBj$O$J$$$N$G!"MW$9$k$K47e(B  
> e$B$l$@$1$NLdBj$H$$$&5$$b$9$k!#e(B

e$B%m!\<%+%kJQ?t$NF3F~$O$[$+$K$b$"$j$^$9!#e(B

- e$B%a%=%C%I%Q%i%a!\<%?e(B
- for var in …
- rescue exc =\> var

rescue e$B$N$O$$$DF3F~$5$l$^$7$?$C$1e(B? e$B:G=i$+$i$“$C$?$o$1$G$O$Je(B  
e$B$$$h$&$K;W$$$^$9!#e(Brescue e$B$K$D$$$F$O?7$7$$$b$N$KBP$9$kDq93$Oe(B  
e$B46$8$i$l$^$;$s$7!”?7$7$$$H$$$&$@$1$GDq93$5$l$k$H$$$&$3$H$O$Je(B  
e$B$$$N$G$O$J$$$G$7$g$&$+!#e(B

e$B$^$?!“%j%j!\<%9$5$l$F$7$^$&$H8\_49@-$NLdBj$,=P$k$N$G!”$\<$R8=;~e(B  
e$BE@$GF~$l$?$$$H;W$C$F$$$^$9!#e(B

> - e$B$“$kJQ?t$,%m!\<%+%kJQ?t$+L50z?t$N%a%=%C%I8F$S=P$7$+$r6hJLe(B  
> e$B$9$k$N$,$d$d:$Fq$K$J$k$N$G$O$J$$$+!#$7$+$7!”:#$G$bJ8;zNse(B  
> e$BCf$N\<0E83+$NFbIt$KBeF~$,$“$l$P%j%F%i%kFb$b%A%'%C%/$9$kI,e(B  
> e$BMW$,$”$k$N$G!"05E]E\*$K:$Fq$K$J$k$H$^$G$O8@$($J$$$h$&$J5$e(B  
> e$B$b$9$k!#e(B

e$B$=$&$G$9$M$'!"$=$s$J$KFq$7$$$H$O46$8$J$$$N$G$9$,!"L\>A0$rL\N)e(B  
e$B$?$;$i$l$k$h$&$Ke(B (?…) e$B$Ge(B name  
e$B$NA08e$K6uGr$rF~$l$i$l$k$he(B  
e$B$&$K$9$k$H$$$&$N$O$I$&$G$9$+$M!#e(B (?\< name \>…) e$B$H$+!#e(B

> e$B$H$$$&$o$1$G!"B(7h$G$-$^$;$s!#FC$K%m!\<%+%kJQ?t$NH=JL$,Fq$7$/e(B  
> e$B$J$ke(B(e$B$+$b$7$l$J$$e(B)e$B$N$O7|G0$G$9!#%?%$%\_%s%0$r9M$($k$He(B1.9.1e$B$KF3e(B  
> e$BF~$9$k$N$OFq$7$$$+$b!#e(B

e$B\>e$K$b=q$-$^$7$?$,!"8\_49@-$NLdBj$,B8:_$7$J$$%?%$%_%s%0$GF~$le(B  
e$B$?$$$H;W$C$F$$$^$9!#e(B

e$B$"$H!"MxE@$r=R$Y$k$He(B

if /(?…)/ =~ str  
foo = $~[:foo]  
end

e$B$He(B 3e$B2se(B foo e$B$H=q$+$J$$$H$$$1$J$$$N$,0J2\<$N$h$&$Ke(B  
1e$B2s$G:Q$`$he(B  
e$B$&$K$J$k$3$H$G$9!#e(B

if /(?…)/ =~ str  
end

e$B$=$7$F!"e(B$1, $2, … e$B$NHV9f$O?t$(4V0c$($F%P%0$N860x$K$J$k$N$Ge(B  
e$BHr$1$?$$$N$G$9$,!"e(B

if /(…)/ =~ str  
foo = $1  
end

e$B$H$$$&$N$O\>e5-$Ne(B 3e$B2s=q$+$J$1$l$P$$$1$J$$$N$KHf$Y$FC;$$$N$G!"e(B  
$1 e$B$r;H$&M6OG$K6n$i$l$F$7$^$$$^$9!#e(B1e$B2s$G$9$`$J$i$=$C$A$N$[$&e(B  
e$B$,C;$$$N$G4V0c$$$K$/$$$[$&$KM6F3$G$-$^$9!#e(B

e$B%P%0$r=P$7$K$/$$%9%?%$%k$r?d\>)$9$k$H$$$&0UL#$G$b$\<$RF~$l$?$$e(B  
e$B$N$G$9$,!"$I$&$G$9$+$M!#e(B

---

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [December 14, 2007, 5:39pm UTC](https://www.ruby-forum.com/t/foo-str-assigns-foo/123104/4 "2007-12-14T17:39:34Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:32597] Re: /(?…)/ =~ str assigns foo”  
on Fri, 14 Dec 2007 18:17:17 +0900, Tanaka A. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
writes:

|\> e$B$(!\<!“$I$&$J$s$@$m$&$J$”!#e(B  
|  
|e$B$A$J$\_$K!"$3$l$O:rF|:#F|$G;W$$IU$$$?$b$N$G$O$J$/!"0JA0$+$i$=e(B  
|e$B$&$7$?$$$H9M$($F$$$k$b$N$G$9!#e(B[ruby-dev:20725] e$B$H$+!#e(B

e$B$$$d!"$=$l$O$b$A$m$s\>5CN$7$F$^$9!#$N$G!"Ds0F$5$l$?$3$H$=$N$be(B  
e$B$N$K6C$-$O$J$$$G$9!#%?%$%\_%s%0E\*$K$O$A$g$C$H$S$C$/$j$7$^$7$?e(B  
e$B$1$I!#e(B

|e$B%m!\<%+%kJQ?t$NF3F~$O$[$+$K$b$“$j$^$9!#e(B  
|  
|\* e$B%a%=%C%I%Q%i%a!\<%?e(B  
|\* for var in …  
|\* rescue exc =\> var  
|  
|rescue e$B$N$O$$$DF3F~$5$l$^$7$?$C$1e(B? e$B:G=i$+$i$”$C$?$o$1$G$O$Je(B  
|e$B$$$h$&$K;W$$$^$9!#e(Brescue e$B$K$D$$$F$O?7$7$$$b$N$KBP$9$kDq93$Oe(B  
|e$B46$8$i$l$^$;$s$7!"?7$7$$$H$$$&$@$1$GDq93$5$l$k$H$$$&$3$H$O$Je(B  
|e$B$$$N$G$O$J$$$G$7$g$&$+!#e(B

e$B$^$“!”$=$&$J$s$G$9$1$I!“$=$l$i$HHf3S$7$F$b@55,I=8=%j%F%i%k$Ne(B  
named capturee$B$O!”$J$s$H$$$&$N$+!VBeF~$7$F$k46!W$,\>/$J$/$J$$e(B  
e$B$G$9$+!#e(B

|e$B$^$?!“%j%j!\<%9$5$l$F$7$^$&$H8\_49@-$NLdBj$,=P$k$N$G!”$\<$R8=;~e(B  
|e$BE@$GF~$l$?$$$H;W$C$F$$$^$9!#e(B

e$B5$;}$A$OJ,$+$j$^$9!#e(B

|e$B$"$H!"MxE@$r=R$Y$k$He(B  
|  
|if /(?…)/ =~ str  
| foo = $~[:foo]  
|end  
|  
|e$B$He(B 3e$B2se(B foo e$B$H=q$+$J$$$H$$$1$J$$$N$,0J2\<$N$h$&$Ke(B 1e$B2s$G:Q$`$he(B  
|e$B$&$K$J$k$3$H$G$9!#e(B  
|  
|if /(?…)/ =~ str  
|end

e$B$=$NMxE@$Oe(B(e$B4V0c$$$K$/$$J}8~$KM6F3$9$k%a%j%C%H$b4^$a$Fe(B)e$BG’$a$^$9!#e(B

e$B$H$O$$$(!"e(B

- e$B\>e$G=R$Y$?BeF~46$N$J$5e(B
- named capturee$B$9$Y$F$G$O$J$/%j%F%i%k$N$\_e(B (e$B$$$d!“$=$&$8$ce(B  
e$B$J$$$H!”$H$F$b;H$($J$$$s$@$1$Ie(B) e$B$H$$$&FC\<l@-e(B

e$B$,5$$K$J$k$s$G$9$h$M!#0EL[$N5sF0$O7k9=7y$o$l$k$H$$$&$3$H$b$"e(B  
e$B$j$^$9$7!#e(B

e$B$&!\<$s!#e(B

```
                            e$B$^$D$b$He(B e$B$f$-$R$me(B /:|)

```

---

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [December 18, 2007, 8:14am UTC](https://www.ruby-forum.com/t/foo-str-assigns-foo/123104/5 "2007-12-18T08:14:46Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:32605] Re: /(?…)/ =~ str assigns foo”  
on Sat, 15 Dec 2007 06:56:15 +0900, Tanaka A. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
writes:

|\> \* e$B\>e$G=R$Y$?BeF~46$N$J$5e(B  
|\> \* named capturee$B$9$Y$F$G$O$J$/%j%F%i%k$N$\_e(B (e$B$$$d!“$=$&$8$ce(B  
|\> e$B$J$$$H!”$H$F$b;H$($J$$$s$@$1$Ie(B) e$B$H$$$&FC\<l@-e(B  
|\>  
|\> e$B$,5$$K$J$k$s$G$9$h$M!#0EL[$N5sF0$O7k9=7y$o$l$k$H$$$&$3$H$b$"e(B  
|\> e$B$j$^$9$7!#e(B  
|  
|e$B$`$7$me(B $~ e$B$X$N0EL[$NBeF~$KHf$Y$FL@\<(E\*$K$J$j$^$9!#$=$N0UL#$Ge(B  
|e$B$O!“e(B$~ e$B$X$NBeF~$KHf$Y$FJQ?tL\>$,$A$c$s$H=q$$$F$”$k$V$s!"BeF~e(B  
|e$B46$OA}2C$7$F$$$k$N$G$O$J$$$G$7$g$&$+!#e(B

e$B$=$NE@$OF10U$7$^$9$,!"e(B$~e$B$O!VFC\<lJQ?t!W$G$9$+$i!#e(B

e$B$3$N1dD9@~\>e$G9M$($k$H!"5$IU$+$:$K%m!\<%+%kJQ?t$,GK2u$5$l$k$3e(B  
e$B$H$r?4G[$7$F$$$k$h$&$J5$$,$7$FMh$^$7$?!#e(B-we$B%\*%W%7%g%s$G!“e(B  
named capturee$B$HF1L\>$N%m!\<%+%kJQ?t$,$9$G$KDj5A$5$l$F$?$i7Y9pe(B  
e$B$9$k!”$H$$$&\>r7o$D$-$GG’$a$F$b$h$$$+$b$7$l$^$;$s!#e(B

---

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [December 18, 2007, 12:28pm UTC](https://www.ruby-forum.com/t/foo-str-assigns-foo/123104/6 "2007-12-18T12:28:12Z")

</div>

In article [E1J4W9q-00074N-Fe@localhost](mailto:E1J4W9q-00074N-Fe@localhost),  
Yukihiro M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

> e$B$3$N1dD9@~\>e$G9M$($k$H!"5$IU$+$:$K%m!\<%+%kJQ?t$,GK2u$5$l$k$3e(B  
> e$B$H$r?4G[$7$F$$$k$h$&$J5$$,$7$FMh$^$7$?!#e(B-we$B%\*%W%7%g%s$G!“e(B  
> named capturee$B$HF1L\>$N%m!\<%+%kJQ?t$,$9$G$KDj5A$5$l$F$?$i7Y9pe(B  
> e$B$9$k!”$H$$$&\>r7o$D$-$GG’$a$F$b$h$$$+$b$7$l$^$;$s!#e(B

e$B$=$N$h$&$K$7$F%3%\_%C%H$7$^$7$?!#e(B

---

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [December 14, 2007, 10:56pm UTC](https://www.ruby-forum.com/t/foo-str-assigns-foo/123104/7 "2007-12-14T22:56:57Z")

</div>

In article [E1J3DXk-0003F0-Fb@localhost](mailto:E1J3DXk-0003F0-Fb@localhost),  
Yukihiro M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

> e$B$$$d!"$=$l$O$b$A$m$s\>5CN$7$F$^$9!#$N$G!"Ds0F$5$l$?$3$H$=$N$be(B  
> e$B$N$K6C$-$O$J$$$G$9!#%?%$%\_%s%0E\*$K$O$A$g$C$H$S$C$/$j$7$^$7$?e(B  
> e$B$1$I!#e(B

e$B$^$!!"D\>A0$J$N$O3N$+$G$9$M!#e(B

> e$B$^$“!”$=$&$J$s$G$9$1$I!“$=$l$i$HHf3S$7$F$b@55,I=8=%j%F%i%k$Ne(B  
> named capturee$B$O!”$J$s$H$$$&$N$+!VBeF~$7$F$k46!W$,\>/$J$/$J$$e(B  
> e$B$G$9$+!#e(B

e$BCf?H$rD4$Y$?$iCM$,%P%$%s%I$5$l$k$N$OIaDL$G$O$J$$$G$7$g$&$+!#e(B  
$1 e$B$H$+$b$=$&$G$9$7!"B\>$N8@8l$Ge(B Haskell e$BEy$N%Q%?!\<%s%^%C%A$be(B  
e$B$=$&$G$9$,!#e(B

> |e$B$^$?!“%j%j!\<%9$5$l$F$7$^$&$H8\_49@-$NLdBj$,=P$k$N$G!”$\<$R8=;~e(B  
> |e$BE@$GF~$l$?$$$H;W$C$F$$$^$9!#e(B
> 
> e$B5$;}$A$OJ,$+$j$^$9!#e(B

e$B$3$N%?%$%\_%s%0$rF($9$H2?G/$bF~$l$i$l$J$$$3$H$K$J$j$=$&$J$N$,e(B  
e$B7y$G$9!#$=$l$H$b!"e(B1.9.1 e$BD\>8e$KF~$l$F$b$$$$$G$9$+e(B?

> - e$B\>e$G=R$Y$?BeF~46$N$J$5e(B
> - named capturee$B$9$Y$F$G$O$J$/%j%F%i%k$N$\_e(B (e$B$$$d!“$=$&$8$ce(B  
> e$B$J$$$H!”$H$F$b;H$($J$$$s$@$1$Ie(B) e$B$H$$$&FC\<l@-e(B
> 
> e$B$,5$$K$J$k$s$G$9$h$M!#0EL[$N5sF0$O7k9=7y$o$l$k$H$$$&$3$H$b$"e(B  
> e$B$j$^$9$7!#e(B

e$B$`$7$me(B $~ e$B$X$N0EL[$NBeF~$KHf$Y$FL@\<(E\*$K$J$j$^$9!#$=$N0UL#$Ge(B  
e$B$O!“e(B$~ e$B$X$NBeF~$KHf$Y$FJQ?tL\>$,$A$c$s$H=q$$$F$”$k$V$s!"BeF~e(B  
e$B46$OA}2C$7$F$$$k$N$G$O$J$$$G$7$g$&$+!#e(B

e$B%j%F%i%k$N$\_$J$N$O!“%m!\<%+%kJQ?t$,e(B lexical scope e$B$G$”$k$H$$e(B  
e$B$&@-e$=$N$h$&$K$7$+%G%6%$%s$G$-$^$;$s!#JQ?tL\>$He(B =~ e$B$Ne(B =  
e$B$H$$$&J8;z$NAH$\_9g$o$;$GBeF~$H9M$($k$H$$$&$N$O$I$&$G$7$g$&e(B?
