getopt-declare 1.09.7 → 1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Declare.rdoc +1861 -0
- data/HISTORY.txt +10 -0
- data/getoptdeclare.gemspec +22 -0
- data/lib/Getopt/Declare.rb +53 -39
- data/lib/Getopt/DelimScanner.rb +3 -3
- data/samples/cmdline_array.rb +26 -25
- data/samples/cmdline_basic.rb +31 -31
- data/samples/cmdline_code.rb +31 -31
- data/samples/cmdline_defer.rb +23 -23
- data/samples/cmdline_file.rb +38 -38
- data/samples/cmdline_finish.rb +14 -0
- data/samples/cmdline_inlines.rb +27 -24
- data/samples/cmdline_mid.rb +39 -39
- data/samples/cmdline_noargv.rb +29 -29
- data/samples/cmdline_parameters.rb +23 -23
- data/samples/cmdline_pvtype.rb +20 -20
- data/samples/cmdline_pvtype2.rb +20 -20
- data/samples/cmdline_regex.rb +27 -27
- data/samples/cmdline_singles.rb +28 -28
- data/samples/demo_cmdline.rb +70 -70
- data/samples/demo_csv.rb +49 -49
- data/samples/demo_interp.rb +44 -44
- data/samples/demo_shell.rb +37 -37
- metadata +31 -24
data/HISTORY.txt
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
|
2
|
+
1.12 - Fixed bug with :+i, :+n, :0+i options not being cast appropiately
|
3
|
+
when used in pvttypes.
|
4
|
+
Added [debug] option to argument description to turn on debugging.
|
5
|
+
|
6
|
+
NOTE: there is a known bug when using [] within pvttype regex
|
7
|
+
definitions. Problem seems to be related to DelimScanner/strscan.
|
8
|
+
|
9
|
+
1.11 - Fixed a pretty bug that was parsing -flags inappropiately and leading
|
10
|
+
to slower parsing.
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
|
3
|
+
spec = Gem::Specification.new do |spec|
|
4
|
+
spec.name = "getopt-declare"
|
5
|
+
spec.version = '1.12'
|
6
|
+
spec.author = "Gonzalo Garramuno"
|
7
|
+
spec.email = 'GGarramuno@aol.com'
|
8
|
+
spec.homepage = 'http://www.rubyforge.org/projects/getoptdeclare/'
|
9
|
+
spec.summary = 'Getopt-Declare is a command-line argument parser.'
|
10
|
+
spec.require_path = "lib"
|
11
|
+
spec.autorequire = "Getopt/Declare"
|
12
|
+
spec.files = ["lib/Getopt/Declare.rb", "lib/Getopt/DelimScanner.rb"]
|
13
|
+
spec.description = <<-EOF
|
14
|
+
Comprehensive and easy to use command-line parser library using
|
15
|
+
regular expressions. Port of Conway's Perl Getopt-Declare.
|
16
|
+
EOF
|
17
|
+
spec.extra_rdoc_files = ["Declare.rdoc", "HISTORY.txt", "getoptdeclare.gemspec"]
|
18
|
+
spec.has_rdoc = false
|
19
|
+
spec.test_files = Dir.glob('samples/*.rb')
|
20
|
+
spec.rubyforge_project = 'getoptdeclare'
|
21
|
+
spec.required_ruby_version = '>= 1.6.8'
|
22
|
+
end
|
data/lib/Getopt/Declare.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
#
|
2
2
|
# Getopt::Declare - Declaratively Expressed Command-Line Arguments via Regular Expressions
|
3
3
|
#
|
4
|
-
# Ruby port of Perl's Getopt::Declare, version 1.
|
4
|
+
# Ruby port of Perl's Getopt::Declare, version 1.12,
|
5
5
|
# released May 21, 1999.
|
6
6
|
#
|
7
|
-
# $Release Version: 1.
|
8
|
-
# $Date: 2004/01/
|
7
|
+
# $Release Version: 1.12 $
|
8
|
+
# $Date: 2004/01/15 10:53:09 $
|
9
9
|
# by Gonzalo Garramu�o
|
10
10
|
#
|
11
11
|
# For detailed instructions, see Declare.rdoc file
|
@@ -61,7 +61,7 @@ end
|
|
61
61
|
|
62
62
|
# Regex for removing bracket directives
|
63
63
|
BracketDirectives =
|
64
|
-
/\[(?:ditto|tight|repeatable|required|mutex:.*|implies:.*|excludes:.*|requires:.*)\]/
|
64
|
+
/\[(?:ditto|tight|strict|repeatable|debug|required|mutex:.*|implies:.*|excludes:.*|requires:.*)\]/
|
65
65
|
|
66
66
|
|
67
67
|
module Getopt
|
@@ -69,10 +69,10 @@ module Getopt
|
|
69
69
|
# Main Class
|
70
70
|
class Declare
|
71
71
|
|
72
|
-
VERSION = '1.
|
72
|
+
VERSION = '1.12'
|
73
73
|
|
74
|
-
# For debugging,
|
75
|
-
@@
|
74
|
+
# For debugging, use [debug] and it will output the ruby code as .CODE.rb
|
75
|
+
@@debug = nil
|
76
76
|
|
77
77
|
# Class used to handle the beginning of options
|
78
78
|
class StartOpt
|
@@ -97,7 +97,7 @@ module Getopt
|
|
97
97
|
nil
|
98
98
|
end
|
99
99
|
|
100
|
-
|
100
|
+
# Helps build regex that matches parameters of flags
|
101
101
|
def ows(g)
|
102
102
|
g
|
103
103
|
end
|
@@ -123,7 +123,7 @@ module Getopt
|
|
123
123
|
@@stdtype = {
|
124
124
|
':i' => { 'pattern' => '(?:(?:%T[+-]?)%D+)' },
|
125
125
|
':n' => { 'pattern' => '(?:(?:%T[+-]?)(?:%D+(?:%T\.%D*)?' +
|
126
|
-
'(?:%T[eE]%D+)?|%T\.%D+(?:%T[eE]%D+)?))'
|
126
|
+
'(?:%T[eE]%D+)?|%T\.%D+(?:%T[eE]%D+)?))',
|
127
127
|
},
|
128
128
|
':s' => { 'pattern' => '(?:%T(?:\S|\0))+' },
|
129
129
|
':qs' => { 'pattern' => %q#"(?:\\"|[^"])*"|'(?:\\'|[^"])*|(?:%T(?:\S|\0))+#
|
@@ -154,7 +154,7 @@ module Getopt
|
|
154
154
|
},
|
155
155
|
|
156
156
|
':+n' => { 'pattern' => ':n',
|
157
|
-
'action' => %q%reject( _VAL_ <= 0.0
|
157
|
+
'action' => %q%reject( _VAL_ <= 0.0,
|
158
158
|
"in parameter '#{_PARAM_}' (#{_VAL_} must be a number greater than zero)")%,
|
159
159
|
'ind' => 1
|
160
160
|
},
|
@@ -178,7 +178,7 @@ module Getopt
|
|
178
178
|
|
179
179
|
# Given a standard type name, return the corresponding regex
|
180
180
|
# pattern or nil
|
181
|
-
def stdtype(name)
|
181
|
+
def ScalarArg.stdtype(name)
|
182
182
|
seen = {}
|
183
183
|
while (!seen[name] && @@stdtype[name] && @@stdtype[name]['ind'])
|
184
184
|
seen[name] = 1; name = @@stdtype[name]['pattern']
|
@@ -188,6 +188,10 @@ module Getopt
|
|
188
188
|
@@stdtype[name]['pattern']
|
189
189
|
end
|
190
190
|
|
191
|
+
def stdtype(name)
|
192
|
+
ScalarArg.stdtype(name)
|
193
|
+
end
|
194
|
+
|
191
195
|
|
192
196
|
# Given the name of a type, return its corresponding action(s)
|
193
197
|
def ScalarArg.stdactions(name)
|
@@ -264,7 +268,6 @@ module Getopt
|
|
264
268
|
|
265
269
|
# Return string with code to process parameter
|
266
270
|
def code(*t)
|
267
|
-
|
268
271
|
if t[0]
|
269
272
|
pos1 = t[0].to_s()
|
270
273
|
else
|
@@ -272,14 +275,12 @@ module Getopt
|
|
272
275
|
end
|
273
276
|
|
274
277
|
c = conversion
|
275
|
-
if
|
276
|
-
c = "\n _VAL_ = _VAL_#{c}\n"
|
277
|
-
end
|
278
|
+
c = "\n _VAL_ = _VAL_#{c}" if not c.empty?
|
278
279
|
|
279
280
|
code = <<-EOS
|
280
281
|
_VAR_ = %q|<#{@name}>|
|
281
282
|
_VAL_ = @@m[#{pos1}]
|
282
|
-
|
283
|
+
_VAL_.tr!("\\0"," ")#{c}
|
283
284
|
EOS
|
284
285
|
|
285
286
|
actions = Getopt::Declare::ScalarArg::stdactions(@type)
|
@@ -299,14 +300,16 @@ EOS
|
|
299
300
|
|
300
301
|
# Based on parameter type, default conversion to apply
|
301
302
|
def conversion
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
'.
|
307
|
-
|
308
|
-
|
309
|
-
|
303
|
+
pat = @@stdtype[@type] ? @@stdtype[@type]['pattern'] : ''
|
304
|
+
[ @type, pat ].each { |t|
|
305
|
+
case t
|
306
|
+
when /^\:0?(\+)?i$/
|
307
|
+
return '.to_i'
|
308
|
+
when /^\:0?(\+)?n$/
|
309
|
+
return '.to_f'
|
310
|
+
end
|
311
|
+
}
|
312
|
+
return ''
|
310
313
|
end
|
311
314
|
|
312
315
|
# Return string with code to cache argument in Getopt::Declare's cache
|
@@ -362,7 +365,7 @@ EOS
|
|
362
365
|
|
363
366
|
# Handle conversion to proper type
|
364
367
|
c = conversion
|
365
|
-
if
|
368
|
+
if not c.empty?
|
366
369
|
code << " #{@name}.map! { |i| i#{c} }\n"
|
367
370
|
end
|
368
371
|
|
@@ -622,16 +625,22 @@ EOS
|
|
622
625
|
_PUNCT_ = {}
|
623
626
|
'
|
624
627
|
|
625
|
-
if flag
|
628
|
+
if flag != ''
|
629
|
+
# This boundary is to handle -- option, so that if user uses
|
630
|
+
# --foo and --foo is not a flag, it does not become
|
631
|
+
# -- and unused: 'foo', but an error saying flag '--foo' not defined.
|
632
|
+
boundary = ''
|
633
|
+
boundary = '(\s+|\Z)' if flag =~ /^(--|-|\+|\+\+)$/
|
634
|
+
|
626
635
|
code << '
|
627
636
|
_args && _pos = gindex( _args, /\G(?:\s|\0)*' +
|
628
|
-
Regexp::quote(flag) + '/' + nocase + ", _pos) or throw(:paramout)
|
637
|
+
Regexp::quote(flag) + boundary + '/' + nocase + ", _pos) or throw(:paramout)
|
629
638
|
unless @_errormsg
|
630
639
|
@_errormsg = %q|incorrect specification of '" + flag + "' parameter|
|
631
640
|
end
|
632
641
|
"
|
633
|
-
elsif ( ScalarArg::stdtype(@args[0]
|
634
|
-
code <<
|
642
|
+
elsif ( ScalarArg::stdtype(@args[0].type)||'') !~ /\%F/
|
643
|
+
code << "\n throw(:paramout) if @_errormsg\n"
|
635
644
|
end
|
636
645
|
|
637
646
|
|
@@ -907,8 +916,8 @@ EOS
|
|
907
916
|
action = action[1..-2]
|
908
917
|
|
909
918
|
raise "Error: bad type directive (expected closing ']' but found " +
|
910
|
-
"'#$1' instead): [pvtype:
|
911
|
-
"
|
919
|
+
"'#$1' instead): [pvtype: #{name} " + (pat ? "/#{pat}/" : '') +
|
920
|
+
" action:#{action} #$1#$2....\n" if desc =~ /\A\s*([^\] \t\n])(\S*)/
|
912
921
|
|
913
922
|
|
914
923
|
Getopt::Declare::ScalarArg::addtype(name,pat,action,ind=~/:/)
|
@@ -993,6 +1002,7 @@ EOS
|
|
993
1002
|
# COMMENT:
|
994
1003
|
i.sub!(/\A[ \t]*#.*\n/,"") and next
|
995
1004
|
|
1005
|
+
|
996
1006
|
# TYPE DIRECTIVE:
|
997
1007
|
se = DelimScanner::new( i )
|
998
1008
|
|
@@ -1012,7 +1022,6 @@ EOS
|
|
1012
1022
|
'{' => '}',
|
1013
1023
|
}
|
1014
1024
|
|
1015
|
-
|
1016
1025
|
_action = se.extractCodeblock(codeblockDelimiters)
|
1017
1026
|
if _action
|
1018
1027
|
i.sub!( Regexp::quote(_action ).to_re, "" )
|
@@ -1036,6 +1045,7 @@ EOS
|
|
1036
1045
|
"\t(did you forget a closing '}'?)\n"
|
1037
1046
|
end
|
1038
1047
|
|
1048
|
+
|
1039
1049
|
# ARG + DESC:
|
1040
1050
|
if i.sub!(/\A(.*?\S.*?)(\t.*\n)/,"")
|
1041
1051
|
spec = "#$1"
|
@@ -1062,6 +1072,7 @@ EOS
|
|
1062
1072
|
_infer(decorator, nil, _mutex)
|
1063
1073
|
|
1064
1074
|
_all_repeatable = true if decorator =~ /\[repeatable\]/
|
1075
|
+
@@debug = true if decorator =~ /\[debug\]/
|
1065
1076
|
|
1066
1077
|
end # while i.length
|
1067
1078
|
|
@@ -1107,7 +1118,7 @@ EOS
|
|
1107
1118
|
@caller = caller()
|
1108
1119
|
|
1109
1120
|
# VESTIGAL DEBUGGING CODE
|
1110
|
-
if @@
|
1121
|
+
if @@debug
|
1111
1122
|
f = File.new(".CODE.rb","w") and
|
1112
1123
|
f.puts( code() ) and
|
1113
1124
|
f.close()
|
@@ -1193,7 +1204,7 @@ EOS
|
|
1193
1204
|
err = eval( code(@caller) )
|
1194
1205
|
if $@
|
1195
1206
|
# oops, something wrong... exit
|
1196
|
-
puts "#{$!} #{
|
1207
|
+
puts "#{$!}: #{$@.inspect}"
|
1197
1208
|
exit(1)
|
1198
1209
|
end
|
1199
1210
|
if !err
|
@@ -1393,9 +1404,11 @@ begin
|
|
1393
1404
|
end
|
1394
1405
|
end
|
1395
1406
|
|
1396
|
-
def finish(i)
|
1397
|
-
if
|
1398
|
-
@_finished =
|
1407
|
+
def finish(*i)
|
1408
|
+
if i.size
|
1409
|
+
@_finished = i
|
1410
|
+
else
|
1411
|
+
@_finished = true
|
1399
1412
|
end
|
1400
1413
|
end
|
1401
1414
|
|
@@ -1526,7 +1539,7 @@ end
|
|
1526
1539
|
code << %q%
|
1527
1540
|
#################### Add unused arguments
|
1528
1541
|
if _args && _nextpos > 0 && _args.length() > 0
|
1529
|
-
@unused.
|
1542
|
+
@unused.replace( @unused + _args[_nextpos..-1].split(' ') )
|
1530
1543
|
end
|
1531
1544
|
|
1532
1545
|
for i in @unused
|
@@ -1564,7 +1577,8 @@ unless _errors > 0
|
|
1564
1577
|
begin
|
1565
1578
|
i.call()
|
1566
1579
|
rescue => e
|
1567
|
-
|
1580
|
+
STDERR.puts "Action in Getopt::Declare specification produced:\n#{e}"
|
1581
|
+
_errors += 1
|
1568
1582
|
end
|
1569
1583
|
end
|
1570
1584
|
end
|
data/lib/Getopt/DelimScanner.rb
CHANGED
@@ -22,7 +22,7 @@
|
|
22
22
|
#
|
23
23
|
# == Version
|
24
24
|
#
|
25
|
-
# $Id: DelimScanner.rb,v 1.
|
25
|
+
# $Id: DelimScanner.rb,v 1.2 2003/01/12 20:56:51 deveiant Exp $
|
26
26
|
#
|
27
27
|
# == History
|
28
28
|
#
|
@@ -73,8 +73,8 @@ class DelimScanner
|
|
73
73
|
|
74
74
|
|
75
75
|
### Class constants
|
76
|
-
Version = /([\d\.]+)/.match( %q{$Revision: 1.
|
77
|
-
Rcsid = %q$Id: DelimScanner.rb,v 1.
|
76
|
+
Version = /([\d\.]+)/.match( %q{$Revision: 1.2 $} )[1]
|
77
|
+
Rcsid = %q$Id: DelimScanner.rb,v 1.2 2003/01/12 20:56:51 deveiant Exp $
|
78
78
|
|
79
79
|
# Pattern to match a valid XML name
|
80
80
|
XmlName = '[a-zA-Z_:][a-zA-Z0-9:.-]*'
|
data/samples/cmdline_array.rb
CHANGED
@@ -1,25 +1,26 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require "Getopt/Declare"
|
4
|
-
|
5
|
-
args = Getopt::Declare.new( %q{
|
6
|
-
|
7
|
-
-v <value> [etc] One or more values
|
8
|
-
<infile> Input file [required]
|
9
|
-
-o <outfiles>... Output files
|
10
|
-
} )
|
11
|
-
|
12
|
-
if args['-v']
|
13
|
-
print "Using value: ", args['-v']['<value>']
|
14
|
-
print " (etcetera)" if args['-v']['etc']
|
15
|
-
print "\n"
|
16
|
-
end
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "Getopt/Declare"
|
4
|
+
|
5
|
+
args = Getopt::Declare.new( %q{
|
6
|
+
|
7
|
+
-v <value> [etc] One or more values
|
8
|
+
<infile:if> Input file [required]
|
9
|
+
-o <outfiles>... Output files
|
10
|
+
} )
|
11
|
+
|
12
|
+
if args['-v']
|
13
|
+
print "Using value: ", args['-v']['<value>']
|
14
|
+
print " (etcetera)" if args['-v']['etc']
|
15
|
+
print "\n"
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
infile = File.new( args['<infile>'] )
|
20
|
+
data = infile
|
21
|
+
|
22
|
+
for outfile in args['-o']
|
23
|
+
#outfile = File.new(outfile,'w')
|
24
|
+
print "processed ",outfile
|
25
|
+
#outfile.close
|
26
|
+
end
|
data/samples/cmdline_basic.rb
CHANGED
@@ -1,31 +1,31 @@
|
|
1
|
-
#!/
|
2
|
-
|
3
|
-
require "Getopt/Declare"
|
4
|
-
|
5
|
-
args = Getopt::Declare.new(<<'EOPARAM')
|
6
|
-
|
7
|
-
============================================================
|
8
|
-
Required parameter:
|
9
|
-
|
10
|
-
-in <infile> Input file [required]
|
11
|
-
|
12
|
-
------------------------------------------------------------
|
13
|
-
|
14
|
-
Optional parameters:
|
15
|
-
|
16
|
-
(The first two are mutually exclusive) [mutex: -r -p]
|
17
|
-
|
18
|
-
-r[and[om]] Output in random order
|
19
|
-
-p[erm[ute]] Output all permutations
|
20
|
-
|
21
|
-
---------------------------------------------------
|
22
|
-
|
23
|
-
-out <outfile> Optional output file
|
24
|
-
|
25
|
-
------------------------------------------------------------
|
26
|
-
Note: this program is known to run very slowly of files with
|
27
|
-
long individual lines.
|
28
|
-
============================================================
|
29
|
-
EOPARAM
|
30
|
-
|
31
|
-
print args.inspect
|
1
|
+
#!/bin/env ruby
|
2
|
+
|
3
|
+
require "Getopt/Declare"
|
4
|
+
|
5
|
+
args = Getopt::Declare.new(<<'EOPARAM')
|
6
|
+
|
7
|
+
============================================================
|
8
|
+
Required parameter:
|
9
|
+
|
10
|
+
-in <infile> Input file [required]
|
11
|
+
|
12
|
+
------------------------------------------------------------
|
13
|
+
|
14
|
+
Optional parameters:
|
15
|
+
|
16
|
+
(The first two are mutually exclusive) [mutex: -r -p]
|
17
|
+
|
18
|
+
-r[and[om]] Output in random order
|
19
|
+
-p[erm[ute]] Output all permutations
|
20
|
+
|
21
|
+
---------------------------------------------------
|
22
|
+
|
23
|
+
-out <outfile> Optional output file
|
24
|
+
|
25
|
+
------------------------------------------------------------
|
26
|
+
Note: this program is known to run very slowly of files with
|
27
|
+
long individual lines.
|
28
|
+
============================================================
|
29
|
+
EOPARAM
|
30
|
+
|
31
|
+
print args.inspect
|
data/samples/cmdline_code.rb
CHANGED
@@ -1,31 +1,31 @@
|
|
1
|
-
#!/
|
2
|
-
|
3
|
-
require "Getopt/Declare"
|
4
|
-
|
5
|
-
args = Getopt::Declare.new(<<'EOPARAM', ['-BUILD'])
|
6
|
-
|
7
|
-
============================================================
|
8
|
-
Required parameter:
|
9
|
-
|
10
|
-
-in <infile> Input file [required]
|
11
|
-
|
12
|
-
------------------------------------------------------------
|
13
|
-
|
14
|
-
Optional parameters:
|
15
|
-
|
16
|
-
(The first two are mutually exclusive) [mutex: -r -p]
|
17
|
-
|
18
|
-
-r[and[om]] Output in random order
|
19
|
-
-p[erm[ute]] Output all permutations
|
20
|
-
|
21
|
-
---------------------------------------------------
|
22
|
-
|
23
|
-
-out <outfile> Optional output file
|
24
|
-
|
25
|
-
------------------------------------------------------------
|
26
|
-
Note: this program is known to run very slowly of files with
|
27
|
-
long individual lines.
|
28
|
-
============================================================
|
29
|
-
EOPARAM
|
30
|
-
|
31
|
-
puts args.code()
|
1
|
+
#!/bin/env ruby
|
2
|
+
|
3
|
+
require "Getopt/Declare"
|
4
|
+
|
5
|
+
args = Getopt::Declare.new(<<'EOPARAM', ['-BUILD'])
|
6
|
+
|
7
|
+
============================================================
|
8
|
+
Required parameter:
|
9
|
+
|
10
|
+
-in <infile> Input file [required]
|
11
|
+
|
12
|
+
------------------------------------------------------------
|
13
|
+
|
14
|
+
Optional parameters:
|
15
|
+
|
16
|
+
(The first two are mutually exclusive) [mutex: -r -p]
|
17
|
+
|
18
|
+
-r[and[om]] Output in random order
|
19
|
+
-p[erm[ute]] Output all permutations
|
20
|
+
|
21
|
+
---------------------------------------------------
|
22
|
+
|
23
|
+
-out <outfile> Optional output file
|
24
|
+
|
25
|
+
------------------------------------------------------------
|
26
|
+
Note: this program is known to run very slowly of files with
|
27
|
+
long individual lines.
|
28
|
+
============================================================
|
29
|
+
EOPARAM
|
30
|
+
|
31
|
+
puts args.code()
|
data/samples/cmdline_defer.rb
CHANGED
@@ -1,23 +1,23 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require "Getopt/Declare"
|
4
|
-
|
5
|
-
|
6
|
-
# With the next specification, the <tt>-rev</tt> and/or <tt>-rand</tt> flags
|
7
|
-
# can be specified _after_ the list of files, but still affect the processing
|
8
|
-
# of those files. Moreover, if the command-line parsing fails for some reason
|
9
|
-
# (perhaps due to an unrecognized argument), the deferred processing will
|
10
|
-
# not be performed.
|
11
|
-
args = Getopt::Declare.new( %q{
|
12
|
-
|
13
|
-
<files>... Files to be processed
|
14
|
-
{ defer { files.each { |i|
|
15
|
-
puts i, " ",$ordered } } }
|
16
|
-
|
17
|
-
-rev[erse] Process in reverse order
|
18
|
-
{ $ordered = -1; }
|
19
|
-
|
20
|
-
-rand[om] Process in random order
|
21
|
-
{ $ordered = 0; }
|
22
|
-
} )
|
23
|
-
|
1
|
+
#!/bin/env ruby
|
2
|
+
|
3
|
+
require "Getopt/Declare"
|
4
|
+
|
5
|
+
|
6
|
+
# With the next specification, the <tt>-rev</tt> and/or <tt>-rand</tt> flags
|
7
|
+
# can be specified _after_ the list of files, but still affect the processing
|
8
|
+
# of those files. Moreover, if the command-line parsing fails for some reason
|
9
|
+
# (perhaps due to an unrecognized argument), the deferred processing will
|
10
|
+
# not be performed.
|
11
|
+
args = Getopt::Declare.new( %q{
|
12
|
+
|
13
|
+
<files>... Files to be processed
|
14
|
+
{ defer { files.each { |i|
|
15
|
+
puts i, " ",$ordered } } }
|
16
|
+
|
17
|
+
-rev[erse] Process in reverse order
|
18
|
+
{ $ordered = -1; }
|
19
|
+
|
20
|
+
-rand[om] Process in random order
|
21
|
+
{ $ordered = 0; }
|
22
|
+
} )
|
23
|
+
|
data/samples/cmdline_file.rb
CHANGED
@@ -1,38 +1,38 @@
|
|
1
|
-
#!/
|
2
|
-
|
3
|
-
require "Getopt/Declare"
|
4
|
-
|
5
|
-
args = Getopt::Declare.new(<<'EOPARAM', ['-BUILD'])
|
6
|
-
|
7
|
-
============================================================
|
8
|
-
Required parameter:
|
9
|
-
|
10
|
-
-in <infile> Input file [required]
|
11
|
-
|
12
|
-
------------------------------------------------------------
|
13
|
-
|
14
|
-
Optional parameters:
|
15
|
-
|
16
|
-
(The first two are mutually exclusive) [mutex: -r -p]
|
17
|
-
|
18
|
-
-r[and[om]] Output in random order
|
19
|
-
-p[erm[ute]] Output all permutations
|
20
|
-
|
21
|
-
---------------------------------------------------
|
22
|
-
|
23
|
-
-out <outfile> Optional output file
|
24
|
-
|
25
|
-
------------------------------------------------------------
|
26
|
-
Note: this program is known to run very slowly of files with
|
27
|
-
long individual lines.
|
28
|
-
============================================================
|
29
|
-
EOPARAM
|
30
|
-
|
31
|
-
|
32
|
-
# TRY STANDARD CONFIG FILES
|
33
|
-
args.parse(['-CONFIG'])
|
34
|
-
#args.parse('/usr/local/config/.demo_rc')
|
35
|
-
|
36
|
-
#args.parse() or raise "cannot parse";
|
37
|
-
|
38
|
-
print args.inspect
|
1
|
+
#!/bin/env ruby
|
2
|
+
|
3
|
+
require "Getopt/Declare"
|
4
|
+
|
5
|
+
args = Getopt::Declare.new(<<'EOPARAM', ['-BUILD'])
|
6
|
+
|
7
|
+
============================================================
|
8
|
+
Required parameter:
|
9
|
+
|
10
|
+
-in <infile> Input file [required]
|
11
|
+
|
12
|
+
------------------------------------------------------------
|
13
|
+
|
14
|
+
Optional parameters:
|
15
|
+
|
16
|
+
(The first two are mutually exclusive) [mutex: -r -p]
|
17
|
+
|
18
|
+
-r[and[om]] Output in random order
|
19
|
+
-p[erm[ute]] Output all permutations
|
20
|
+
|
21
|
+
---------------------------------------------------
|
22
|
+
|
23
|
+
-out <outfile> Optional output file
|
24
|
+
|
25
|
+
------------------------------------------------------------
|
26
|
+
Note: this program is known to run very slowly of files with
|
27
|
+
long individual lines.
|
28
|
+
============================================================
|
29
|
+
EOPARAM
|
30
|
+
|
31
|
+
|
32
|
+
# TRY STANDARD CONFIG FILES
|
33
|
+
args.parse(['-CONFIG'])
|
34
|
+
#args.parse('/usr/local/config/.demo_rc')
|
35
|
+
|
36
|
+
#args.parse() or raise "cannot parse";
|
37
|
+
|
38
|
+
print args.inspect
|