in reply to Re: What does this code do?
in thread What does this code do?

Suppose @EXPORT_OK= qw/foo bar baz/; And the import list is (bar) alone. Just because the whole import list is scanned doesn't mean that if any element matches something in @EXPORT_OK then all elements in @EXPORT_OK are matched!

In this example, nothing in @_ matches $EXPORT_OK[0] or $EXPORT_OK[-1] for that matter. But something does match something in @EXPORT_OK.

So... I still don't get it.

Replies are listed 'Best First'.
Re: Re: Re: What does this code do?
by jwest (Friar) on Oct 03, 2002 at 21:24 UTC
    You're absolutely right. I had, apparently mistakenly, assumed that @_ was a superset of the contents of both @EXPORT_OK and @fail, instead of a subset of either.

    Lacking the context of how @_ is being defined, it was an easy assumption to make. Without visibility into the calling code, I'm reticent to hazard another guess.

    I suppose it's not oustide the scope of reason that the code may not reflect the author's intent. In a module this pervasive, however, it's not likely that this is the case.

    --jwest

    -><- -><- -><- -><- -><-
    All things are Perfect
        To every last Flaw
        And bound in accord
             With Eris's Law
     - HBT; The Book of Advice, 1:7
    
      I think it says, "If an argument matches the first entry in @EXPORT_OK, then do the heavy (general) form. Even if said argument (and all arguments) contain no non-alpha characters (including sigels).

      Likewise for the fail array, but I don't know what that's for yet.

      Module buggy? Well, calling export_to_level was reportedly buggy a year ago, so who knows? If it mistakenly runs the general form, it will not malfunction, so a mistake in this logic could indeed go unnoticed.

      I'm wondering if it's to support a feature that got dropped. Maybe the first entry in @EXPORT_OK was to mean something special?