Oops, Luke Palmer alerted me to the fact that I screwed up in the below.

In a message dated Tue, 22 Aug 2006, Trey Harris writes:
My question is, if a program is running where two versions of Dog are loaded, say 1.3.4 and 2.1, and a file contains:

 use Dog-1.3.4-cpan:JRANDOM;

 class Poodle is Dog {
    ...
 }

will the compiler know that 'Dog' in this file must always refer to 1.3.4, and not 2.1, as most other references to the shortname would? If not, sites that need dependency stability will have to write

I misstated my worry here. In this case, by the same rule that "my Dog $foo" gets the right version because the longname is aliased to the shortname in the lexical scope of the use, it would work.

What I'm actually concerned about is the case where the Dog CPAN distribution includes Poodle.pm. I think that we need Poodle.pm to be written like:

  use Dog-1.3.4-cpan:JRANDOM;
  class Poodle-1.3.4-cpan:JRANDOM is Dog { ... }

If it's written:
  use Dog;
  class Poodle-1.3.4-cpan:JRANDOM is Dog { ... }

then in a running Perl program that has previously loaded Dog-2.1-*, Poodle-1.3.4 will become a subclass of Dog-2.1, which causes any code using Poodle-1.3.4 to be unable to protect itself from an unforseen upstream dependency change.

Such wordiness seems unfortunate and error-prone. I don't believe the specs yet have anything to say about how filesystem layout exists in the world of versioned packages, but it would be nice if a distribution's packages can use a shortname and automatically refer to other packages in the same distribution before the compiler looks elsewhere within %*INC (or its moral equivalent).

Trey

Reply via email to