Why doesn't "use lib" take effect in this way?

perl

Solution

use happens at compile-time, not run-time, so your variable hasn't been set yet. You can do:

my $curr_lib;
BEGIN {
    $curr_lib = $0;
    $curr_lib =~ s/myapp\.pl/libx/;
}    
use lib $curr_lib;

or you could:

use FindBin;
use lib "$FindBin::Bin/libx";

Problem

In my app, I put all the modules in one directory , let's just call it `libx`. Since it's up to the user to choose where to deploy the app, I don't want to hardcode the `lib` path. So at the beginning of `myapp.pl`, I wrote the following lines of code. ``` #! /usr/bin/perl -w use strict; my $curr_dir = $0; my $curr_lib = $curr_dir; $curr_lib =~ s/myapp\.pl/libx/; use $curr_lib ; ``` Instead of getting what I'm expecting, I got compiling errors! So what's wrong with my code? I don't want to hardcode the lib path when using `use lib`, how should I do this? Sorry I forgot to mention that when the app is deployed, `myapp.pl` and `libx` are in the same directory.

Original source