From: Matthew Vernon Date: Thu, 13 Feb 2014 18:16:39 +0000 (+0000) Subject: More general argument parsing; neaten code X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ijackson/git?a=commitdiff_plain;h=c9f544da6fba1a81b64cb5261db3332ab7f785eb;p=evade-mail-usrlocal.git More general argument parsing; neaten code Rather than special-casing -a, loop through any arguments (and complain if there is anything other than -a). Use .= Use unless rather than if (!) ... Signed-off-by: Matthew Vernon --- diff --git a/evade-mail-admin b/evade-mail-admin index 6f3fe21..4e5be40 100755 --- a/evade-mail-admin +++ b/evade-mail-admin @@ -409,20 +409,22 @@ sub listq ($) { } sub action_list { - my ($q, $listall); - if ($priv) { $listall = 1; } - if (@ARGV) { - my $v = shift @ARGV; - if ($v ne "-a") { - die "only legal argument to list is -a"; - } else { $listall=1; } + my $listall = 0; + $listall ||= $priv; + while (@ARGV) { + last unless $ARGV[0] =~ m/^-/; + $_ = shift @ARGV; + last if m/^--?$/; + if (m/^-a$/) { + $listall=1; + } else { + die "unknown option to list \`$_'\n"; + } } nomoreargs; - $q="SELECT * FROM addrs WHERE user=?"; - if (!$listall) { - $q = $q. " AND NOT redirect = ''"; - } - $q = $q. " ORDER BY localpart"; + my $q = "SELECT * FROM addrs WHERE user=?"; + $q .= " AND NOT redirect = ''" unless $listall; + $q .= " ORDER BY localpart"; $q = $dbh->prepare($q); $q->execute($user); listq($q);