How do you use a variable in lib Path?

蓝咒 提交于 2019-12-05 16:25:46

问题


I would like to use the $var variable in lib path.

my $var = "/home/usr/bibfile;"

use lib "$var/lib/";

However when I do this it throws an error.

I'd like to use use lib "$var/lib/";instead of use lib "/home/usr/bibfile/lib/";.

How can I assign a variable, so that it can be used in the setting of lib modules?


回答1:


Variables work fine in use lib, well, just like they do in any string. However, since all use directives are executed in BEGIN block, your variable will be not yet initialized at the moment you run use, so you need to put initialization in BEGIN block too.

my $var;
BEGIN { $var = "/home/usr/bibfile"; }
use lib "$var/lib/";

use Data::Dumper;
print Dumper \@INC;

Gives:

$VAR1 = [
      '/home/usr/bibfile/lib/',
      # ... more ...
    ];



回答2:


Not sure about what you're trying to accomplish, but seems like a task for FindBin::libs:

my $var;
BEGIN { $var = "/home/usr/bibfile" };
use FindBin::libs "Bin=$var", "base=lib";



回答3:


You can't, because the use directive is evaluated at compile time, while other variables are evaluated at runtime.

If your lib is located somewhere relative to your original script, you can use the standard module FindBin:

# $Bin from FindBin is the directory of the original script
use FindBin;
use lib "$FindBin::Bin/path/to/bib";
use MyModule;


来源:https://stackoverflow.com/questions/13950637/how-do-you-use-a-variable-in-lib-path

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!