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);
| [reply] [d/l] |
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
| [reply] [d/l] [select] |
| [reply] |
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. | [reply] [d/l] |
Muy bueno !!!
Thanks so much
| [reply] |