GetoptLong Accessing the values with out looping

Simple question but for the life of me I can't figure it out.
I am converting some of my basic perl scripts that I use daily as an
excersice in learning ruby.

I need to grab a date from the command line that will eventually be
converted into a filename.

no I want to call my script like such ...
./myscript.rb -d 2006-08-06

I then want to validate what is being set in -d.
Here is the code I have that works but it just seems excessive to have to
loop through the options...

def getopts
  opts = GetoptLong.new([ '-d', '--date', GetoptLong::REQUIRED_ARGUMENT])
  opts.each do |opt,arg|
    if opt =~ /-d|--date/ && arg =~ /(\d{4})-(\d{2})-(\d{2})/
        date = arg.gsub('-','')
        return date
    else
      puts "Date needs to be set to YYYY-MM-DD using -d or --date"
      exit
    end
  end
end

I thought I would just be able to do...
if opt['-d'] =~ <rxhere> || opt['--date'] =~ <rxhere>
  <code here>
end

Thanks.
Paul Kraus

it's not that bad is it?

     harp:~ > cat a.rb
     require 'getoptlong'
     require 'time'

     def getdate
       gl = GetoptLong.new ['-d', '--date', GetoptLong::REQUIRED_ARGUMENT]
       opts = {} and gl.each{|k,v| opts[k.delete('-')] = v}

       if((date = opts['d']))
         raise 'date needs to be set to YYYY-MM-DD using -d or --date' unless
           date =~ %r/^ \d{4} - \d{2} - \d{2} $/iox
         return Time.parse(date)
       end
     end

     p getdate

     harp:~ > ruby a.rb --date=2006-05-01
     Mon May 01 00:00:00 MDT 2006

regards.

-a

···

On Tue, 16 May 2006, Paul D. Kraus wrote:

Simple question but for the life of me I can't figure it out.
I am converting some of my basic perl scripts that I use daily as an
excersice in learning ruby.

I need to grab a date from the command line that will eventually be
converted into a filename.

no I want to call my script like such ...
./myscript.rb -d 2006-08-06

I then want to validate what is being set in -d.
Here is the code I have that works but it just seems excessive to have to
loop through the options...

def getopts
opts = GetoptLong.new([ '-d', '--date', GetoptLong::REQUIRED_ARGUMENT])
opts.each do |opt,arg|
  if opt =~ /-d|--date/ && arg =~ /(\d{4})-(\d{2})-(\d{2})/
      date = arg.gsub('-','')
      return date
  else
    puts "Date needs to be set to YYYY-MM-DD using -d or --date"
    exit
  end
end

I thought I would just be able to do...
if opt['-d'] =~ <rxhere> || opt['--date'] =~ <rxhere>
<code here>
end

--
be kind whenever possible... it is always possible.
- h.h. the 14th dali lama

no I want to call my script like such ...
./myscript.rb -d 2006-08-06

Have you tried CommandLine?

I then want to validate what is being set in -d.
Here is the code I have that works but it just seems excessive to have to
loop through the options...

def getopts
opts = GetoptLong.new([ '-d', '--date', GetoptLong::REQUIRED_ARGUMENT])
opts.each do |opt,arg|
   if opt =~ /-d|--date/ && arg =~ /(\d{4})-(\d{2})-(\d{2})/
       date = arg.gsub('-','')
       return date
   else
     puts "Date needs to be set to YYYY-MM-DD using -d or --date"
     exit
   end
end
end

I thought I would just be able to do...
if opt['-d'] =~ <rxhere> || opt['--date'] =~ <rxhere>
<code here>
end

Thanks.
Paul Kraus

Jim Freeze

···

On May 16, 2006, at 8:22 AM, Paul D. Kraus wrote:

       opts = {} and gl.each{|k,v| opts[k.delete('-')] = v}

Makes perfect sense in this example you are still looping through the
options.
All though this is better on the eyes.

I was hoping that the instance of getoptlong had some kind of method to get
the value of one of the command line options.

Paul