递归函数问题

递归函数问题

#!/usr/bin/perl

use strict;
use warnings;

my $bits = 32;
my $file = './cnip.bak';

sub mask {
   my $argv = shift();
   if ( $argv <= 1 ) { return $bits }
   $bits--;
   my $dest = &mask($argv / 2);
   return $dest;
}

open(FILE, "< $file") or die $!;
   while ( <FILE> ) {
      chomp $_;
      my ( $ipaddr, $hosts ) = split( /\//, $_ );
      my $netmask = &mask($hosts);
      print "$ipaddr ---> $netmask\n";
   }
close(FILE) or die $!;


递归调用mask函数,但第一次调用返回值是正确的,后来的就都成负数了!

文件cnip.bak的内容,IP后面的数表示主机数,根据这个主机数算出子网掩码位数
58.14.0.0/131072
58.16.0.0/65536
58.17.0.0/32768
58.17.128.0/32768
58.18.0.0/65536
58.19.0.0/65536
58.20.0.0/65536
58.21.0.0/65536
58.22.0.0/131072
58.24.0.0/131072
#! /usr/bin/perl

use strict;
use warnings;

my $bits;
my $file = './cnip.bak';

sub mask {
   my $argv = shift();
   if ( $argv <= 1 ) { return $bits }
   $bits--;
   my $dest = &mask($argv / 2);
   return $dest;
}

   while ( <DATA> ) {
      $bits = 32;
      chomp $_;
      my ( $ipaddr, $hosts ) = split( /\//, $_ );
      my $netmask = &mask($hosts);
      print "$ipaddr ---> $netmask\n";
   }


$bits--; 一直减,肯定变负啦。


葛优那句“大意了”

多谢指正