in reply to Re: use lib statement with path variable
in thread use lib statement with path variable

Well this is what I am doing, finding the current path of the script first, so I am not sure if I can set $some_path any earlier.
#!/usr/bin/perl use File::Spec; use File::Basename; $some_path = dirname(File::Spec->rel2abs(__FILE__)); use lib qw($some_path/lib);

Replies are listed 'Best First'.
Re^3: use lib statement with path variable
by Eily (Monsignor) on Dec 04, 2013 at 19:55 UTC

    There are two problems there. qw takes each blank characters separated elements in its operand (most often, words separated by spaces) and reads them in a simple quotish context. Put a simpler way, qw(A $b C %h); could also be written ('A', '$b', 'C', '%h'). In Ruby there is a qw-like construct that allows double-quotish interpretation, but this is Perl. So you instead have to write use lib ("$some_path/lib",); (the comma is optional, I just always put an extra comma in a single element list).

    The second issue is that use is called straightaway, so you could say that perl reads your program :

    # Compiling using File::Spec using File::Basename there is a global variable called $some_path add to path $some_path/lib _Compilation complete_ # Running $some_path = dirname(File::Spec->rel2abs(__FILE__));
    This is of course really simplified.

    The BEGIN keyword means that a block has to be executed during compile time, and not to wait after compilation completion. You should write:

    my $some_path; BEGIN { $some_path = "/my/path"; } use lib "$some_path/lib"; # Yeah, you don't even need the parenthesis, + Perl is clever enough for you # Edit : thanks dave_the_m for the correction

      You should write: ...
      The use statement needs to be outside the BEGIN block, e.g.
      my $some_path; BEGIN { $some_path = "/my/path"; } use lib "$some_path/lib";

      Dave.

        Thanks, corrected :)

      Yeah, you don't even need the parenthesis, Perl is clever enough for you...

      You never need the parentheses there, unless you're doing something strange with precedence or associativity. A list is a list is a list.

        Indeed, I can't tell why I used parentheses in the first place actually ...

      Muy bueno !!! Thanks so much