in reply to Dynamically load unknown modules

It's generally not a Good Thing to access globals from outside a sub if these values should much better be passed as parameters. The unqualified use of '$File::Fimnd::name','$File::Find::dir' and '$_' makes it quite impossible to look at this function alone.

Second: it's not neccessary to quote "$vars", this is Perl, not Bash.

Third: 's/\//\:\:/g' can much better be written as 's#/#::#g'.

#fourth: #self->{_$superclass[1].$superclass[2]} = new $name; #that's not what you want, you want: $self->{ "_$superclass[1].$superclass[2]" } = ...;

Fifth, and most important: what does $name contain at the 'new $name' point? Is there really a package defined in that dynamic module? Did you try "$name->new"?

--
http://fruiture.de

Replies are listed 'Best First'.
Re: Re: Dynamically load unknown modules
by chromatic (Archbishop) on Aug 27, 2002 at 14:50 UTC

    Those "unqualified variables" are part of the standard interface of File::Find. It's shipped with Perl for several years. The interface does suck. (I think you accidentally left the concatenation operator in your fourth point, too.)

      Yes, and because the interface sucks (imho,too), i don't want to have to remember it when reading a subroutine that actually has not much to do with it.

      Hmm, i assume the '.' is wanted inside the string, because the leading '_' without concatenation operator implies the author thought "in hash keys it's like in double-quoted strings". I think he'll figure out himself what he might have meant ;)

      --
      http://fruiture.de