Forum: Ruby Getopt/Declare v1.20

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
B74f9ac58c7a0b80d877470198e1a472?d=identicon&s=25 gga (Guest)
on 2007-01-17 10:10
(Received via mailing list)
Getopt::Declare - Declaratively Expressed Command-Line Arguments via
Regular Expressions

Getopt::Declare is *yet another* command-line argument parser, one
which is specifically designed to be powerful but exceptionally easy to
use.

= SYNOPSIS

require "Getopt/Declare"
args = Getopt::Declare.new(<<'EOF')

   -q, --quiet                 quiet
   -f, --files <files:if>...   input files
   -n, --number  <num:n>       a float number
   -i, --integer <num:i>       an integer number

 EOF

p args['-q']
p args['-f']
p args.unused

= What's NEW in v1.20?

- Parameter definitions can now also be specified using GNU style help
lines, like in the example above.
- Parameter definitions can now be recognized by the use either of one
or more tabs (like before) or by 3 consecutive spaces.  This simplifies
parameter definitions quite a lot, particularly for those using editors
that are not friendly to tabs.
- A couple of minor bug fixes here and there.
- Docs are now available at rubyforge.

= How to get it?

gem install getopt-declare

or download as a zip file from rubyforge.

= For more information

http://getoptdeclare.rubyforge.org            - documentation
http://rubyforge.org/projects/getoptdeclare/  - project
Ffcb418e17cac2873d611c2b8d8d891c?d=identicon&s=25 unknown (Guest)
on 2007-01-17 10:31
(Received via mailing list)
The library looks groovy.

But I never knew that block quoted strings worked like this:

> args = Getopt::Declare.new(<<'EOF')
>    -q, --quiet                 quiet
>    -f, --files <files:if>...   input files
>    -n, --number  <num:n>       a float number
>    -i, --integer <num:i>       an integer number
>  EOF

That's just completely cool! And it also makes a lot of sense: I think
I'll actually remember it now.

You can do somethin like this:

  irb(main):008:0> puts <<'STRING_END'.gsub('a') {'XXX'}
  irb(main):009:0' bab
  irb(main):010:0' aba
  irb(main):011:0' STRING_END
  bXXXb
  XXXbXXX


You can even do this (discovered just now in one of those, "surely this
wont work too, will it?" Ruby moments)!...

  irb(main):015:0> puts <<BLOCK_ONE_END + <<BLOCK_TWO_END
  irb(main):016:0" hello
  irb(main):017:0" there
  irb(main):018:0" BLOCK_ONE_END
  irb(main):019:0" and how about
  irb(main):020:0" some more?
  irb(main):021:0" BLOCK_TWO_END
  hello
  there
  and how about
  some more?

Brilliant!

Anyone know when you do and don't need to place ''s around the string
terminator?

Cheers,
  Benjohn
B74f9ac58c7a0b80d877470198e1a472?d=identicon&s=25 gga (Guest)
on 2007-01-17 12:46
(Received via mailing list)
>
> Anyone know when you do and don't need to place ''s around the string
> terminator?
>

You don't, really, but it is better to use '', to have other
programmers not think you are actually appending a previously defined
constant (and prevent your program mis-behaving because of that).

You also do need "" if you expect #{} to work, thou.

Also, you may want to get into the habit of using:

<<-'EOF'
EOF

The '-' makes sure that Ruby will still read the block properly even if
someone else touches the code and makes the EOF not show up in the
first column.
918c6daad03c85e51ad1a11f57017947?d=identicon&s=25 Devin Mullins (twifkak)
on 2007-01-17 14:43
(Received via mailing list)
benjohn@fysh.org wrote:
> Anyone know when you do and don't need to place ''s around the string
> terminator?
'' tells Ruby not to interpolate, while the default (without quotes) is
to do so. You can also use quotes (single or double) to use a more funky
delimiter. - lets you indent the ending delimiter.
852a62a28f1de229dc861ce903b07a60?d=identicon&s=25 Gavin Kistner (phrogz)
on 2007-01-17 17:55
(Received via mailing list)
Devin Mullins wrote:
> benjohn@fysh.org wrote:
> > Anyone know when you do and don't need to place ''s around the string
> > terminator?
> '' tells Ruby not to interpolate, while the default (without quotes) is
> to do so. You can also use quotes (single or double) to use a more funky
> delimiter. - lets you indent the ending delimiter.

The above is correct, unlike (I think) some other answers in this
thread. To be clear about it:
a = <<FOO
a#{1+1}
FOO

b = <<'FOO'
b#{1+1}
FOO

c = <<"FOO"
c#{1+1}
FOO

d = <<-FOO
d#{1+1}
  FOO

e = <<-'FOO'
e#{1+1}
  FOO

f = <<-"FOO"
f#{1+1}
  FOO

puts a, b, c, d, e, f
#=> 2
#=> #{1+1}
#=> 2
#=> 2
#=> #{1+1}
#=> 2
852a62a28f1de229dc861ce903b07a60?d=identicon&s=25 Gavin Kistner (phrogz)
on 2007-01-17 18:10
(Received via mailing list)
Phrogz wrote:
> puts a, b, c, d, e, f
> #=> 2
> #=> #{1+1}
> #=> 2
> #=> 2
> #=> #{1+1}
> #=> 2

Er, I meant:
#=> a2
#=> b#{1+1}
#=> c2
#=> d2
#=> e#{1+1}
#=> f2
Ffcb418e17cac2873d611c2b8d8d891c?d=identicon&s=25 unknown (Guest)
on 2007-01-17 18:35
(Received via mailing list)
> #=> a2
> #=> b#{1+1}
> #=> c2
> #=> d2
> #=> e#{1+1}
> #=> f2

That's a nasty bug in ruby you've found there ;-)
This topic is locked and can not be replied to.