Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid

Re^2: use lib statement with path variable

by sans-clue (Beadle)
on Dec 04, 2013 at 19:41 UTC ( #1065640=note: print w/replies, xml ) Need Help??

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 (Parson) 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

      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 ...

      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";


        Thanks, corrected :)

      Muy bueno !!! Thanks so much

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1065640]
[1nickt]: Discipulus Yes, I think it is maybe easier to be a good monk in "real" life when you are young and idealistic or old and weary ... nost so much in middle age.
[1nickt]: 😲 ... or did you mean the Middle Ages, when monastic life was more, umm, "earthy" ?!

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (7)
As of 2017-12-13 14:05 GMT
Find Nodes?
    Voting Booth?
    What programming language do you hate the most?

    Results (368 votes). Check out past polls.