How do I use a Perl package known only in runtime?

后端 未结 7 524
忘掉有多难
忘掉有多难 2020-12-10 02:21

I have a Perl program, that needs to use packages (that I also write). Some of those packages are only chosen in Runtime (based on some environment variable). I don\'t want

相关标签:
7条回答
  • 2020-12-10 03:20
    eval "require $ENV{a}";
    

    "use" doesn't work well here because it only imports in the context of the eval.

    As @Manni said, actually, it's better to use require. Quoting from man perlfunc:

    If EXPR is a bareword, the require assumes a ".pm" extension and 
    replaces "::" with "/" in the filename for you, to make it easy to 
    load standard modules.  This form of  loading of modules does not 
    risk altering your namespace.
    
    In other words, if you try this:
    
            require Foo::Bar;    # a splendid bareword
    
    The require function will actually look for the "Foo/Bar.pm" file 
    in the directories specified in the @INC array.
    
    But if you try this:
    
            $class = 'Foo::Bar';
            require $class;      # $class is not a bareword
        #or
            require "Foo::Bar";  # not a bareword because of the ""
    
    The require function will look for the "Foo::Bar" file in the @INC 
    array and will complain about not finding "Foo::Bar" there.  In this 
    case you can do:
    
            eval "require $class";
    
    0 讨论(0)
提交回复
热议问题