2012年6月6日 星期三

003 sort ip [perl]



#!/usr/bin/perl -w

use strict;

my @argv = @ARGV;
my @ips = ();

if (0==scalar((@argv))) { &print_Usage(); exit(0); }
&get_Parameter(\@argv,\@ips);

print("Before:\n");
foreach(@ips) { print("\t$_\n"); }

my @ips_sorted = sort sort_ip @ips;

print("After:\n");
foreach(@ips_sorted) { print("\t$_\n"); }


sub sort_ip()
{
    my ($a1,$a2,$a3,$a4) = split(/\./,$a);
    my ($b1,$b2,$b3,$b4) = split(/\./,$b);
    $a1 <=> $b1 or $a2 <=> $b2 or $a3 <=> $b3 or $a4 <=> $b4;
}


sub get_Parameter($$)
{
    my ($pargv,$pips) = @_;
    foreach(@$pargv)
    {
if (my(@ip)= $_ =~ /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/)
{
   my $bError = 0;
   if (0==$ip[0] or 0==$ip[3]) { $bError = 1; }
   else { foreach(@ip) { if ($_ > 255) { $bError = 1; last; } } }
   if (not $bError) { push(@$pips,join(".",@ip)); }
}
    }
}

sub print_Usage()
{
    my $strSelf = $0; $strSelf =~ s/.+[\\\/]//;
    print("usage: $strSelf ip1 ip2 ip3\n");
}

002 get parameter [perl]



#!/usr/bin/perl -w

use strict;

my @argv = @ARGV;

if (0==scalar((@argv))) { &print_Usage(); exit(0); }
&get_Parameter();

sub get_Parameter()
{
    while(@argv)
    {
        my $strWord = shift(@argv);
        my ($name,$value) = (undef,undef);
        if ( ($name,$value) = $strWord =~ /^\-(\w)\=(\w+)$/) { }
        elsif ( ($name,$value) = $strWord =~ /^\-\-(\w{2,})\=(\w+)$/) { }
        elsif ($strWord =~ /^\-\-(\w{2,})$/)
        {
            if (scalar(@argv)==0) { print("X: insufficient parameter for $strWord\n"); last; }
            ($name,$value) = ($1,shift(@argv));
        }
        elsif ($strWord =~ /^\-(\w)$/)
        {
            if (scalar(@argv)==0) { print("X: insufficient parameter for $strWord\n"); last; }
            ($name,$value) = ($1,shift(@argv));
        }
        else
        {
            print("X: unrecognized parameter: $strWord\n"); next;
        }
        &take_Action($name,$value);
    }
}

sub take_Action($$)
{
    my ($operator,$operant) = @_;
    if    ($operator eq "h" or $operator eq "hi")  { print("Hello $operant\n"); }
    elsif ($operator eq "b" or $operator eq "bye") { print("Goodbye $operant\n"); }
    else  { print("X: undefined parameter: $operator\n"); }
}

sub print_Usage()
{
    my $strSelf = $0; $strSelf =~ s/.+[\\\/]//;
    print("usage: $strSelf\n".
          "       --hi Name\n".
          "         -h Name\n".
          "      --bye Name\n".
          "         -b Name\n".
          "       --hi=Name\n".
          "         -b=Name\n");
}