#!/usr/bin/env perl use strict; use warnings; BEGIN { package String; use Carp; our @ISA = "Exporter"; $INC{"String.pm"} = __FILE__; { my %reg; sub get_regexp { $reg{$_[1]} } sub has_regexp { exists $reg{$_[1]} } sub add_regexp { my $class = shift; my ($name, $re) = @_; croak "Already exists: $_[0]" if $class->has_regexp($name); $reg{$name} = $re; no strict "refs"; *{"is_$name"} = sub { !!($_[0] =~ $re) }; push our @EXPORT_OK, "is_$name"; } } __PACKAGE__->add_regexp(Url => qr[^http:]); __PACKAGE__->add_regexp(SecureUrl => qr[^https:]); }; use String qw(is_SecureUrl); print is_SecureUrl("https://github.com/"), "\n"; #### #!/usr/bin/env perl use strict; use warnings; BEGIN { package String; use Type::Library -base; use Type::Utils; use Types::Standard qw(StrMatch); $INC{"String.pm"} = __FILE__; declare "Url", as StrMatch[qr(^http:)]; declare "SecureUrl", as StrMatch[qr(^https:)]; }; use String -all; print is_SecureUrl("https://github.com/"), "\n"; assert_SecureUrl("http://evil.com/");