in reply to Re^6: BEGIN and compile-time
in thread BEGIN and compile-time

To be slightly clearer on a couple of points, when use Module VERSION fails because the version number is not high enough

  1. The require part of the use happens first
  2. The require step makes no use of the version information, just grabbing the first module of that name that it finds via @INC
  3. The version check happens second
  4. Since the version check fails, the import() part never happens
  5. The successful require doesn't get undone

BTW, some modules are smart enough to provide their own sub VERSION so that they can record which version was requested and then have that information impact their sub import to cause it to act in a backward-compatible manner. That way they can make more types of improvements in newer versions of their module without breaking backward compatibility (so long as they documented that users of their modules should always specify which version's interface they programmed to).

- tye