From the Foreach section of the perlsyn POD:
Foreach Loops
The "foreach" loop iterates over a normal list value and sets
the variable VAR to be each element of the list in turn. If
the variable is preceded with the keyword "my", then it is
lexically scoped, and is therefore visible only within the
loop. Otherwise, the variable is implicitly local to the
loop and regains its former value upon exiting the loop. If
the variable was previously declared with "my", it uses that
variable instead of the global one, but it's still localized
to the loop. This implicit localisation occurs only in a
"foreach" loop.
The variable $open is local to the loop and regains its former value at the end of the loop. You're calling &view with a localized package variable that is uninitialized.
Use a lexical iterator instead so that the anonymous subroutine definition keeps a reference to the $open that exists at the time of the definition. Change this:
foreach $open (@deleted)
{
....
}
to this:
foreach my $open (@deleted)
{
...
}