Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re: Re: Re: Re: Execution order of END/CHECK vs BEGIN/INIT

by belden (Friar)
on Jun 27, 2003 at 23:58 UTC ( [id://269776]=note: print w/replies, xml ) Need Help??


in reply to Re: Re: Re: Execution order of END/CHECK vs BEGIN/INIT
in thread Execution order of END/CHECK vs BEGIN/INIT

With apologies, because I'm sure my question has already been answered but I'm too dense to recognize that fact... :)

If module A "uses" module B, then you want module A's BEGIN block to run before modules B's BEGIN block. When cleanup happens, you want module B's END block to run before module A's END block.

Given these modules

# this is A.pm package A; BEGIN { print "Haven't used B yet\n" } use B; BEGIN { print "Just used B\n" } END { print "Exiting A\n" } 1; # this is B.pm package B ; BEGIN { # open a file or exit(1) with a message to STDERR open B_FH, 'somefile' or exit warn "somefile: $!\n" ; } END { close B_FH ; print "Exiting B\n" ; } 1;

If I read your post correctly, you're saying that I want module B's END block to run before module A's END block. If this is what I wanted, I think I'd be disappointed: A use's B, which means that 'use B' in A causes us to fully parse B before finishing parsing A. Therefore, B's END block is loaded before A's END block. This makes A's END block Last In, thereby First Out.

The truth is, I actually don't care in which order ENDs and CHECKs get called. I just want to know why BEGIN/INIT are FIFO and END/CHECK are LIFO.

blyman
setenv EXINIT 'set noai ts=2'

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://269776]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others lurking in the Monastery: (2)
As of 2024-04-24 17:45 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found