Variable-Strongly-Typed version 1.1.0

This modules allow you to strongly type your variables. Also known as the 'no fun' module - it can greatly enhance you code's quality and robustness.

By enforcing types on some (or all) of your variables you will eliminate a large class of careless (& not so careless) errors.

This could also aid an editor or code-browsing tools to verify code correctness without having to execute the script.

use Variable::Strongly::Typed;

    my $int             :TYPE('int');       # must have an 'int' value
    my $float           :TYPE('float');     # must have a 'float' value
    my $string          :TYPE('string');    # must not be a reference
    my $file            :TYPE('IO::File');  # must be an IO::File
    my @array_of_ints   :TYPE('int');       # Each slot must contain an int
    my %hash_of_floats  :TYPE('float');     # Each value must be a float

my $int_own_error :TYPE('int', \&my_own_error_handler);

# Roll my own error handler

my @array_of_rgb :TYPE(\&red_green_blue); # my enumerated type

# For subs!!

     sub return_an_int :TYPE('int') {
        # .. do some stuff ..
        return $something;
     }

# ... and later ...

$int = 23; # All is well
$int = 'howdy!'; # This line will croak with a good error message

$float = 3.23; # All is well, nothing to see here $float = new XML::Parser; # croak!

$array_of_ints[23] = 44; # Groovy $array_of_ints[12] = 'yah'; # croak!

$hash_of_floats{pi} = 3.14159; # no problem $hash_of_floats{e} = new IO::File; # croak!

# Return 1 if this val is RED, BLUE, or GREEN # 0 otherwise
sub red_green_blue {

local $_ = shift;

/\A RED \z/xms || /\A BLUE \z/xms || /\A GREEN \z/xms; }

$array_of_my_very_own_types[23] = 99; # croak! $array_of_my_very_own_types[2] = 'BLUE'; # OK!

$int_own_error = 'lksdklwe'; # The sub 'my_own_error_hanlder'

                                    #   will be #   called with the
                                    #   offending value

my $got_it = return_an_int(); # Will 'croak' (or call your error

                                    #   function) #   if this sub doesn't
                                    #   return an 'int'

INSTALLATION

To install this module, run the following commands:

perl Makefile.PL
make
make test
make install

Alternatively, to install with Module::Build, you can use the following commands:

perl Build.PL
./Build
./Build test
./Build install

DEPENDENCIES

Class::Std::Utils
Attribute::Handlers

COPYRIGHT AND LICENCE

Copyright (C) 2005, Mark Ethan Trostler

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.