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");
}

沒有留言:

張貼留言