in reply to END blocks created at run time?

I would recommend using File::Temp for the actual problem.

For the general construct though, END blocks are the wrong answer. They fire when Perl stops running, not before you exit your subroutine. Instead you probably wanted to use ReleaseAction...

UPDATE
bbfu is right about when the delete should happen. But you could still use ReleaseAction as follows:

$$$fh = ReleaseAction->new( sub {unlink $file or die "Cannot unlink $file: $!"} );
Now whenever $fh goes away, the file is deleted. (There may be an order of action issue though.)-:

Replies are listed 'Best First'.
(bbfu) Re (tilly) 1: END blocks created at run time?
by bbfu (Curate) on May 08, 2001 at 04:15 UTC

    Actually, tilly, I think that lemmett did want the END blocks to fire when Perl exited, not the subroutine. It would be kind of silly to create a temp file and then proceed to delete it before passing it back to the user. :-)

    But I whole-heartedly agree with your suggestion to use File::Temp.

    Update (for tilly's update): I like the idea of using a ReleaseAction for unlinking the file as long as the order of execution is OK. That's certainly an interesting way of binding a ReleaseAction to the filehandle (assigning the action reference to the scalar part of the anonymous symbol, right?). I hadn't thought about sticking extra info into the filehandle like that. :-)

    bbfu
    Seasons don't fear The Reaper.
    Nor do the wind, the sun, and the rain.
    We can be like they are.