Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

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


Comment on Re^2: use lib statement with path variable
Download Code
Re^3: use lib statement with path variable
by Eily (Deacon) 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";

      Dave.

        Thanks, corrected :)

      Muy bueno !!! Thanks so much

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1065640]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (9)
As of 2014-12-27 02:34 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (176 votes), past polls