Am Freitag, 12. Jun 2009, 16:45:51 +0900 schrieb Heesob P.:
I like to set caller’s $_ variable in a method, but it did’t work for me.
[…]
I noticed $_ is is local to the current scope.
Is it impossible to set the caller’s $_ variable in a method without
using binding and eval?
$_ has some special meanings in Kernel.gets, Kernel.sub, Regexp#~
etc. This comes in handy for -ne/-pe option oneliners. You
shouldn’t use it outside that (if you don’t know what you do).
The rb_lastline_set() call sets $_. What’s the equivalent in pure Ruby? If
it’s possible to do within a C extension, it ought to be possible to do in
pure Ruby.
It is not possible, which is why backref and lastline should be
banned. $_ and $~ are treated specially and can only be set across
calls from C code (or Java code in JRuby).
[…]
I noticed $_ is is local to the current scope.
Is it impossible to set the caller’s $_ variable in a method without
using binding and eval?
$_ has some special meanings in Kernel.gets, Kernel.sub, Regexp#~
etc. This comes in handy for -ne/-pe option oneliners. You
shouldn’t use it outside that (if you don’t know what you do).
Except we’re trying to match the zlib.c spec. Specifically,
rb_gzreader_gets() in zlib.c:
static VALUE
rb_gzreader_gets(argc, argv, obj)
int argc;
VALUE *argv;
VALUE obj;
{
VALUE dst;
dst = gzreader_gets(argc, argv, obj);
if (!NIL_P(dst)) {
rb_lastline_set(dst);
}
return dst;
}
The rb_lastline_set() call sets $_. What’s the equivalent in pure Ruby?
If
it’s possible to do within a C extension, it ought to be possible to do
in
pure Ruby.
Regards,
Dan
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.