#!/usr/bin/perl use strict; use warnings; { package cmdline; # create new object sub new { my $class=shift; # restliche Parameter lesen # Bei Arrayreffenz diese lesen, # ansonsten Array annehmen my $argv=[]; if(ref($_[0]) eq 'ARRAY') { $argv = shift; } else { $argv=[@_]; } bless($self,$class); $self->_parse($argv); return $self; } # private parse sub _parse { my $self=shift; my $argv=shift; # sinnvolle Werte vordefinieren: # das ist nützlich, # wenn man allgemeine Steueroptionen wie "verbose" hat $self->{verbose}=0; # parsen for(@{$argv}) { my ($key, $value)=split(/\s*=\s*/,$_,2); # eventuell währen hier noch ein paar Test sinnvoll, # ob die Werte gültig sind. # z.B. # wenn Nicht-Wortzeichen enthalten sind überspringen next if($key=~/\W/); # wenn sid keine Zahl ist überspringen next if($key eq 'sid' and $value !~/^\d+$/); $self->{$key}=$value; } return 1; } # get value for key sub get { my $class=shift; my $key=shift; return undef unless has($key); return $self->{$key}; } # get all keys sub keys { return keys(%{$_[0]}) } # test for key sub has { return exists($_[0]->{$_[1]}); } # set a key sub set { $_[0]->{$_[1]}=$_[2]; return 1; } # Beispiel für eine Abkürzung: # so braucht man nicht # $cmds->get('verbose') > 0 # schreiben sub verbose { return $_[0]->{verbose} > 0; } 1; } package main; my $cmds = cmdline->new(@ARGV); # erst fragen ob die Option existiert, # wenn nicht -> Fehler. my $sid = -1; if( !$cmds->has('sid') ) { # wenn "verbose" > 0 mit einer richtigen Fehlermeldung sterben, # ansonsten mit einem Fehler ( exit-Wert > 0 ) sterben if($cmds->verbose) { die 'Bitte "sid" setzen!'; } else { exit 1; } } $cmds->get('sid');