i've been slowing adding to my optparse examples over the last few days...

if anyone wants to add one to these, send one to me and i'll post it back on
this list - i know there are examples out there but i'm simple minded and
needed to figure some of it out myself.  to add an example, just do a
cut-n-paste of one of mine...  this is a work in progress so no flaming ;-)

feel free to contact me offline with additions

file: optparse/eg.rb
====
#!/usr/bin/env ruby
require 'optparse'


def EXAMPLE(tag='')
  @example ||= 0
  STDOUT.printf "\n%s\nEXAMPLE %d - %s\n\n", '=' * 42, @example, tag
  @example += 1
  fork do
    def exit; exit!; end
    yield
    STDOUT.flush; STDERR.flush
  end
  Process.wait; STDOUT.flush; STDERR.flush
end


###############################################################################

EXAMPLE('arg with no option') do 

###############################################################################

  command_line = %w(--help)
  ARGV.replace command_line

  ARGV.options do |q|
    q.def_option('--help', '-h', 'show this message') do 
      puts q
      exit
    end
    q.parse! # parse here so errors are automatically caught!
  end

end # EXAMPLE



###############################################################################

EXAMPLE('arg with optional option') do 

###############################################################################

  command_lines = [
    %w(--verbose),
    %w(--verbose=42),
  ] 

  command_lines.each do |command_line|
    STDOUT.printf "RUNNING WITH <%s>\n", command_line
    ARGV.replace command_line 

    q = nil
    ARGV.options do |q|
      q.def_option('--verbose=[verbosity]', '-v', 'vebose mode') do |arg|
        $verbose = arg || true
      end
    end
    q.parse! # parse here so errors _aren't_ caught!

    STDOUT.printf "$verbose = %s\n", $verbose
  end

end # EXAMPLE



###############################################################################

EXAMPLE('arg with required option') do 

###############################################################################

  command_lines = [
    %w(--required=42),
    %w(--required),
  ] 

  command_lines.each do |command_line|
    STDOUT.printf "RUNNING WITH <%s>\n", command_line
    ARGV.replace command_line 

    q = nil
    ARGV.options do |q|
        q.def_option('--required=ARBITRARY', '-a', 'arg') { $r = 42}
    end
    q.parse! # parse here so errors aren't caught!

    STDOUT.printf "$r = %s\n", $r
  end

end # EXAMPLE



###############################################################################

EXAMPLE('parsing something other than ARGV') do 

###############################################################################

  command_line = %w(--help)

  op = OptionParser.new
  op.def_option('--help', '-h', 'show this message') do 
    puts op
    exit
  end
  op.def_option '--foo', '-f', 'foo'
  op.parse command_line

end # EXAMPLE



###############################################################################

EXAMPLE('parsing something other than ARGV destructively') do 

###############################################################################

  command_line = %w(--foo)

  op = OptionParser.new
  op.def_option '--foo', '-f', 'foo'

  printf "before: %s\n", command_line.inspect
  op.parse! command_line
  printf "after: %s\n", command_line.inspect

end # EXAMPLE



###############################################################################

EXAMPLE('parsing something other than ARGV non-destructively') do 

###############################################################################

  command_line = %w(--foo)

  op = OptionParser.new
  op.def_option '--foo', '-f', 'foo'

  printf "before: %s\n", command_line.inspect
  op.parse command_line
  printf "after: %s\n", command_line.inspect

end # EXAMPLE
====

-a
-- 

ATTN: please update your address books with address below!

===============================================================================
| EMAIL   :: Ara [dot] T [dot] Howard [at] noaa [dot] gov
| PHONE   :: 303.497.6469
| ADDRESS :: E/GC2 325 Broadway, Boulder, CO 80305-3328
| STP     :: http://www.ngdc.noaa.gov/stp/
| NGDC    :: http://www.ngdc.noaa.gov/
| NESDIS  :: http://www.nesdis.noaa.gov/
| NOAA    :: http://www.noaa.gov/
| US DOC  :: http://www.commerce.gov/
|
| The difference between art and science is that science is what we
| understand well enough to explain to a computer.  
| Art is everything else.  
|   -- Donald Knuth, "Discover"
|
| /bin/sh -c 'for l in ruby perl;do $l -e "print \"\x3a\x2d\x29\x0a\"";done' 
===============================================================================