Hvordan kan jeg analysere kommandolinjebrytere i Perl?

stemmer
4

For å utvide min grep emulator i Perl har jeg lagt til støtte for en -rbryter som gjør at rekursiv søke i underkataloger. Nå kommandolinjen påkallelse ser omtrent slik ut:

perl pgrep.pl -r <directory> <expression>

Både -rog directoryargumentene er valgfritt (katalog som standard ''). Per nå har jeg bare sjekke om det første argumentet er -r, og hvis ja angi riktig flagg, og skanne i resten to argumenter ved hjelp av shift. Dette åpenbart ville være et problem hvis -rskulle vises på slutten av argumentlisten eller enda verre - i mellom katalognavn og søkeuttrykket.

En løsning ville være å bare slette -relementet fra @ARGV utvalg, slik at jeg kan bare skifte -i de resterende argumenter, men jeg kan ikke finne ut en måte å gjøre det uten å få en 'udef' i en merkelig posisjon i min array. Noen forslag eller ulike strategier som du kanskje har brukt er velkomne.

Publisert på 03/02/2009 klokken 14:56
kilden bruker
På andre språk...                            


4 svar

stemmer
1
  • Legg et -d bryter for katalogen. Min mening er: "Hvis en kommando er valgfri bør den ha en bryter for å aktivere den."
  • Jeg vil også fjerne bryterne (og deres argumenter) fra tabellen som jeg leste dem, slik at bare min "uttrykk". Hvis det er mer enn ett element i denne matrisen, noen skrev noe galt.
Svarte 03/02/2009 kl. 15:06
kilden bruker

stemmer
21

Du bør bruke GetOpt::Long. Dette vil gjøre alt du trenger som beskrevet.

Svarte 03/02/2009 kl. 15:08
kilden bruker

stemmer
4
use Getopt::Std;

our $opt_r; # will be set to its value if used.
getopts('r:'); # -r has an option.
Svarte 03/02/2009 kl. 15:30
kilden bruker

stemmer
0

Min kapittel om "Configuration" i Maste Perl går gjennom flere muligheter for kommandolinjebryter behandlingen, fra Perl sin -stil den populære moduler for håndtering av disse. For eksempel, ville jeg sannsynligvis starte med getopt :: Std og konvertere til getopt :: Long hvis jeg trengte det senere.

Lykke til, :)

Svarte 11/02/2009 kl. 18:25
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more