=cut
+sub _valid_for_type {
+ my $self = shift;
+ my ($value, $type) = @_;
+ if ($type eq 'HASH' || $type eq 'ARRAY'
+ || $type eq 'IO' || $type eq 'CODE') {
+ return reftype($value) eq $type;
+ }
+ else {
+ my $ref = reftype($value);
+ return !defined($ref) || $ref eq 'SCALAR' || $ref eq 'REF' || $ref eq 'LVALUE';
+ }
+}
+
sub add_package_symbol {
my ($self, $variable, $initial_value) = @_;
? @{$variable}{qw[name sigil type]}
: $self->_deconstruct_variable_name($variable);
+ if (@_ > 2) {
+ $self->_valid_for_type($initial_value, $type)
+ || confess "$initial_value is not of type $type";
+ }
+
my $pkg = $self->name;
no strict 'refs';
$io = $self->get_package_symbol($io_desc) if $self->has_package_symbol($io_desc);
}
elsif ($type eq 'ARRAY') {
- $scalar = $self->get_package_symbol($scalar_desc) if $self->has_package_symbol($scalar_desc);
+ $scalar = $self->get_package_symbol($scalar_desc);
$hash = $self->get_package_symbol($hash_desc) if $self->has_package_symbol($hash_desc);
$code = $self->get_package_symbol($code_desc) if $self->has_package_symbol($code_desc);
$io = $self->get_package_symbol($io_desc) if $self->has_package_symbol($io_desc);
}
elsif ($type eq 'HASH') {
- $scalar = $self->get_package_symbol($scalar_desc) if $self->has_package_symbol($scalar_desc);
+ $scalar = $self->get_package_symbol($scalar_desc);
$array = $self->get_package_symbol($array_desc) if $self->has_package_symbol($array_desc);
$code = $self->get_package_symbol($code_desc) if $self->has_package_symbol($code_desc);
$io = $self->get_package_symbol($io_desc) if $self->has_package_symbol($io_desc);
}
elsif ($type eq 'CODE') {
- $scalar = $self->get_package_symbol($scalar_desc) if $self->has_package_symbol($scalar_desc);
+ $scalar = $self->get_package_symbol($scalar_desc);
$array = $self->get_package_symbol($array_desc) if $self->has_package_symbol($array_desc);
$hash = $self->get_package_symbol($hash_desc) if $self->has_package_symbol($hash_desc);
$io = $self->get_package_symbol($io_desc) if $self->has_package_symbol($io_desc);
}
elsif ($type eq 'IO') {
- $scalar = $self->get_package_symbol($scalar_desc) if $self->has_package_symbol($scalar_desc);
+ $scalar = $self->get_package_symbol($scalar_desc);
$array = $self->get_package_symbol($array_desc) if $self->has_package_symbol($array_desc);
$hash = $self->get_package_symbol($hash_desc) if $self->has_package_symbol($hash_desc);
$code = $self->get_package_symbol($code_desc) if $self->has_package_symbol($code_desc);
$self->remove_package_glob($name);
- $self->add_package_symbol($scalar_desc => $scalar) if defined $scalar;
+ $self->add_package_symbol($scalar_desc => $scalar);
$self->add_package_symbol($array_desc => $array) if defined $array;
$self->add_package_symbol($hash_desc => $hash) if defined $hash;
$self->add_package_symbol($code_desc => $code) if defined $code;