From: Daniel Berger Date: 2009-06-12T22:55:07+09:00 Subject: Re: How to set $_ in a method? > -----Original Message----- > From: Bertram Scharpf [mailto:lists@bertram-scharpf.de] > Sent: Friday, June 12, 2009 5:18 AM > To: ruby-talk ML > Subject: Re: How to set $_ in a method? > > Hi, > > Am Freitag, 12. Jun 2009, 16:45:51 +0900 schrieb Heesob Park: > > 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). 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