Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: perl problem Getopt::Long // v anglictine :: <solved />  (Přečteno 1578 krát)

nettezzaumana

  • Host
perl problem Getopt::Long // v anglictine :: <solved />
« kdy: 21 Ledna 2008, 12:01:23 »
ahoj,
poslal jsem pred vice nez tydnem nize prilozeny text vyvojarum perlu a maintaineru Getopt::Long modulu. Odpovedi jsem se zatim nedockal.. Proto to zkousim tady.
Nechal jsem naprosto puvodni text (v anglictine), pac predpokladam, ze ten, kdo bude znat odpoved si to v pohode precte.
Diky a zdravi ntz

ps. text je samozrejme spustitelny a komentovany script v perlu

Kód: [Vybrat]
#!/usr/bin/perl -w
#
# Please don't reject my following questions. I spend lot of time to solve that. I use perl very often
# and i know from previous, that Getopt::Long does not like me ;) and if i've needed, i'd used Getopt::Std
# or 'write-on-scratch' my own @ARGV parser, but now i am working on fairly large and complex
# Perl project and would like to use this, with useful features filled, module.
#
# q.1) How to order exit program if passed mix(bundled) of correct and incorrect options?
# -xV results in 'unknown option: x' message and then is executed version() ..
# !solved -- take a look below
#
# q.2) How to order strictly, that one-letter option !must be passed only with '-', not with '-|--'?
# --V :prints version as well as -V ..
# --p xx :prints "xx" as well as -pxx|-p xx|--print=xx|--print xx
#
# To solve this problems, i had tried all possible and impossible parameters for
# Getopt::Long::Configure() but with no success.
#

use strict;
use Getopt::Long;

##Subs

sub version {
        print << 'EOF';
this needs no version
EOF
exit 0;
};

# q.3) So, how should i globally configure Getopt::Long, to became options handling exactly as is
# described below in usage() func?

sub usage {
print << 'EOF';
Usage:
-V, --version print version message.
-?, -h, --help print help message.
-p <string>
--print=<string> print given string.
EOF
exit 0;
};

##Body

my($version, $usage, $print_input);

# When "no_ignore_case" omitted, by some ?magic reasons GetOptions returns
# correctly, that '--V' is 'Unknown option'..
#
# When:
# Getopt::Long::Configure("bundling");
# GetOptions("V" => \$version);
# '--V' is interpreted such a 'Unknown option: v'
#
# And much more strange examples can be made..
Getopt::Long::Configure("bundling", "no_auto_abbrev", "no_ignore_case");

GetOptions(
        "version|V" => \$version, ## !! called &sub from here will be
## executed even if other opts failed..
## !! assign $var here, rather then
## call sub, preserves this behaviour..
## In main documentation, there is not
## lost a word about this and so worst,
## direct calling sub is there advised.
"help|h|?" => \$usage,
"print|p=s" => \$print_input,
) || die "bad option(s)\n";

## so, let's call what should be called from here..
&version if $version;
&usage if $usage;
print "\"$print_input\" passed\n" if $print_input;

## only mark, where script ends
print "all done, this is last exit\n";
exit 0;

# !!
# So my final work-aroud is:
# Complete please at least documentation 'man Getopt::Long' with some reference about
# this "traps" ..
#
# Thanks for work-around &
# Best Regards
« Poslední změna: 24 Ledna 2008, 16:07:16 od nettezzaumana »

nettezzaumana

  • Host
Re: perl problem Getopt::Long // v anglictine :: <solved />
« Odpověď #1 kdy: 24 Ledna 2008, 16:12:18 »
problem vyresen -- dle odpovedi maintainera tohoto modulu::

zadny problem nemam a to co popisuju je standartni chovani ..
muj navrh na doplneni dokumentace dopadl takto ::

Citace
..
if you thing, that documentation should be completed, feel free to write your own recommendations and examples and then post them to us..

 

Provoz zaštiťuje spolek OpenAlt.