diff options
author | Jesse Luehrs <doy@tozt.net> | 2010-05-11 02:12:44 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2010-05-11 02:12:44 -0500 |
commit | b1a00d0e626e61c80bdcd71b550d3e24eefc9e0b (patch) | |
tree | 82014af6016457ac5c276aabd3b9029dd82cc7df | |
parent | 3b9f59fdaf5084b92e08106c8a544b722404a45e (diff) | |
download | package-stash-b1a00d0e626e61c80bdcd71b550d3e24eefc9e0b.tar.gz package-stash-b1a00d0e626e61c80bdcd71b550d3e24eefc9e0b.zip |
handle IO slots
-rw-r--r-- | lib/Stash/Manip.pm | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/lib/Stash/Manip.pm b/lib/Stash/Manip.pm index be37e87..3b9bcff 100644 --- a/lib/Stash/Manip.pm +++ b/lib/Stash/Manip.pm @@ -222,33 +222,44 @@ sub remove_package_symbol { # no doubt this is grossly inefficient and # could be done much easier and faster in XS - my ($scalar_desc, $array_desc, $hash_desc, $code_desc) = ( + my ($scalar_desc, $array_desc, $hash_desc, $code_desc, $io_desc) = ( { sigil => '$', type => 'SCALAR', name => $name }, { sigil => '@', type => 'ARRAY', name => $name }, { sigil => '%', type => 'HASH', name => $name }, { sigil => '&', type => 'CODE', name => $name }, + { sigil => '', type => 'IO', name => $name }, ); - my ($scalar, $array, $hash, $code); + my ($scalar, $array, $hash, $code, $io); if ($type eq 'SCALAR') { $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); + $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); $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); $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); $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); + $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); } else { confess "This should never ever ever happen"; @@ -260,6 +271,7 @@ sub remove_package_symbol { $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; + $self->add_package_symbol($io_desc => $io) if defined $io; } =head2 list_all_package_symbols $type_filter |