my $x = '255.0.0.0'; print "$x is a valid mask!\n" if validateMask($x); sub validateMask { return # return undef if it's not complete unless $_[0] =~/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/; $_[0] = unpack ( "B32", pack( "C4", split ( /\./, $_[0] ) ) ); return # return undef if we find an invalid if $_[0] =~ /01/; # mask ( a zero followed by a one ) return 1; # return 1 if everything is okay } #### 11111111000000000000000000000000 is a valid mask! #### print "255.0.0.0 is a valid mask!\n" if validateMask('255.0.0.0'); #### Modification of a read-only value attempted at ./idnopheq.pl line 5. #### my $mask = shift; #### sub validateMask { $_ = shift; return unless /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/; unpack('B32', pack('C4', split /\./)) =~ /01/ ? undef : 1; }