Bivio::Type::DomainName
# Copyright (c) 2002-2008 bivio Software, Inc. All Rights Reserved.
# $Id$
package Bivio::Type::DomainName;
use strict;
use Bivio::Base 'Type.SyntacticString';
use Socket ();
sub REGEX {
return qr/((?:[-a-z0-9]{1,63})(?:\.[-a-z0-9]{1,63})+)/is;
}
sub SYNTAX_ERROR {
return Bivio::TypeError->DOMAIN_NAME;
}
sub get_width {
return 255;
}
sub internal_post_from_literal {
return lc($_[1]);
}
sub to_http_uri {
my($proto, $value) = @_;
return b_use('Type.HTTPURI')->from_literal(
join('', 'http://', $proto->from_literal_or_die($value)));
}
sub unsafe_to_dotted_decimal {
my($proto, $value) = @_;
return Socket::inet_ntoa(
gethostbyname($proto->from_literal_or_die($value))
|| return undef,
);
}
1;