サブネットマスク計算 Net::Netmaskモジュール使ってみた

use utf8;
use strict;
use warnings;
use NetAddr::IP;
use Net::Netmask;

my $block = new Net::Netmask ('192.168.56.1/27');
print "block:$block"."\n"; 
#ネットワークアドレス
print "base:".$block->base()."\n"; 
#サブネットマスク
print "mask:".$block->mask()."\n";
#ホストマスク
print "hostmask:".$block->hostmask()."\n";
#ビットの数
print "bits:".$block->bits()."\n";
#サイズ取得
print "size:".$block->size()."\n";
print "maxblock:".$block->maxblock()."\n";
#ブロードキャストアドレス
print "broadcast:".$block->broadcast()."\n";
print "next:".$block->next()."\n";
print "first:".$block->first()."\n";

#IPアドレスの範囲を取得 ネットワークアドレス、ブロードキャストアドレス含む
for my $ip ($block->enumerate) {
    print "$ip\n";
}

実行結果

block:192.168.56.0/27
base:192.168.56.0
mask:255.255.255.224
hostmask:0.0.0.31
bits:27
size:32
maxblock:21
broadcast:192.168.56.31
next:192.168.56.32
first:192.168.56.0
192.168.56.0
192.168.56.1
192.168.56.2
192.168.56.3
192.168.56.4
192.168.56.5
192.168.56.6
192.168.56.7
192.168.56.8
192.168.56.9
192.168.56.10
192.168.56.11
192.168.56.12
192.168.56.13
192.168.56.14
192.168.56.15
192.168.56.16
192.168.56.17
192.168.56.18
192.168.56.19
192.168.56.20
192.168.56.21
192.168.56.22
192.168.56.23
192.168.56.24
192.168.56.25
192.168.56.26
192.168.56.27
192.168.56.28
192.168.56.29
192.168.56.30
192.168.56.31

参考URL https://metacpan.org/pod/Net::Netmask