From: ara.t.howard@... Date: 2006-05-16T23:06:39+09:00 Subject: Re: GetoptLong Accessing the values with out looping 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 > end > > I thought I would just be able to do... > if opt['-d'] =~ || opt['--date'] =~ > > end 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 -- be kind whenever possible... it is always possible. - h.h. the 14th dali lama