Thanks for that reply. YANGNI's made my day. I'll keep things as
simple as poss from now on...

On Sun, 26 Feb 2006 10:34:03 +0900 Eric
Hodel <drbrain / segment7.net> wrote:

> 
> On Feb 25, 2006, at 10:19 AM, John Maclean wrote:
> 
> > I've had a look at /usr/share/doc/ruby-1.8.4/sample/less.rb and made
> > some comments on the processes where I could. It came with my repos
> > installation of Ruby. Can someone point me in the right direction  
> > here,
> > as there a a number of things that I'm not familar with or
> > understand....
> >
> > #!/usr/bin/ruby
> > there isn't a single def foo ... end method here - why?
> 
> YAGNI
> 
> > also how come this hasn't been turned into a class?
> 
> YAGNI
> 
> > is that because that there is no need for one?
> 
> Yes.
> 
> > also why the use of GLOBAL VARIABLES? I thought that they are not  
> > from the "church of good design"
> 
> There are no global variables in less.rb.  Global variables start  
> with a $.
> 
> > gobal vars to hard-code where these programs are... assuming a
> > Unix- based system it was weired because the path was initially set
> > to / usr/local/bin/ which did not work i personally think it's
> > better to use a ruby equivalent of `which less` to find out where
> > the command is rather than hard coding it in this way
> 
> This is in sample/, so they may or may not work out of the box.   
> less.rb isn't installed anywhere on your system, so YMMV.
> 
> Also, less.rb won't work when the PATH env var is empty if you use  
> which (think cron).
> 
> > ZCAT = "/usr/bin/zcat"
> > LESS = "/usr/bin/less"
> >
> > funny how you can call ruby less.rb with --help
> 
> Why?  It follows logically from the implementation.
> 
> > # dunno about this class or method
> > FILE = ARGV.pop
> 
> ARGV is the command line argument Array.
> 
> > # ah, i think that this may be exception handling.
> > # if no arguments from command line *OPTION* is zero
> > # otherwise out an empty string at the end of the filename??
> > OPTION = (if ARGV.length == 0; "" else ARGV.join(" "); end)
> 
> If there are options after removing the filename join them with  
> spaces.  Otherwise use an empty string.  No exception handling,  
> exceptions involve begin/rescue/ensure/raise.
> 
> > # we are grepping for stuff...
> 
> matching, not grepping.
> 
> > # a file that ends in Z or gz - these are compressed files
> > if FILE =~ /\.(Z|gz)$/
> >
> >   # what is  *%s*?
> >   #   - is it a string that we come across when we are grepping  
> > through
> > the files?
> 
> The string printf format variable.
> 
> >   # see `ri kernel.format` for the *format* method
> >   # "Argument is a string to be substituted"
> >   # i think it works with sprintf
> 
> Correct.
> 
> >   # run zcat on a compressed file _first_ then view it with less
> >   exec(format("%s %s | %s %s", ZCAT, FILE, LESS, OPTION))
> >   # otherwise there *is* no compressed file and we treat it  
> > differently
> > elsif FILE == nil
> >   #
> >   exec(format("%s %s", LESS, OPTION))
> 
> This is why less.rb --help works.
> 
> > else
> >   print(format("%s %s %s", LESS, OPTION, FILE), "\n")
> >   exec(format("%s %s %s", LESS, OPTION, FILE))
> > end
> > # end the `less`ing. i dont know why the use of the empty brackets
> 
> Differences in style.
> 
> > exit()
> 


-- 
John Maclean
MSc (DIC)
07739 171 531