Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re: Calculations before using lib;

by choroba (Abbot)
on Aug 04, 2014 at 15:06 UTC ( #1096144=note: print w/ replies, xml ) Need Help??


in reply to Calculations before using lib;

To call the code during the compilation phase when use is resolved, use the BEGIN block:

use FindBin qw($Bin); my $dir; BEGIN { if ($Bin =~ /^(\/.+\/monkeyman\/bin)(\/.+)?/) { $dir = "$1/lib"; } use lib $dir; use MonkeyMan;

See perlsub for details.

لսႽ ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ


Comment on Re: Calculations before using lib;
Download Code
Re^2: Calculations before using lib;
by v_melnik (Sexton) on Aug 04, 2014 at 15:09 UTC

    Wow, thank you so much! I thought I've lost my sense %)

    V.Melnik
Re^2: Calculations before using lib;
by ikegami (Pope) on Aug 04, 2014 at 16:10 UTC
    hum... passing undef to lib? Fixed:
    use FindBin qw($RealBin); my @extra_libs; BEGIN { if ($RealBin =~ /^(\/.+\/monkeyman\/bin)(\/.+)?/) { push @extra_libs, "$1/lib"; } } use lib @extra_libs; use MonkeyMan;
    or
    use FindBin qw($RealBin); use lib (); BEGIN { if ($RealBin =~ /^(\/.+\/monkeyman\/bin)(\/.+)?/) { import->lib("$1/lib"); } } use MonkeyMan;

    Note the switch to $RealBin in order to handle symlinks.

Re^2: Calculations before using lib;
by afoken (Parson) on Aug 05, 2014 at 04:40 UTC

    As perl needs to know the arguments for use lib before calling lib's import method, every expression used there is implicitly in a BEGIN block equivalent. So I often use a construct like this in my code:

    #!/usr/bin/perl use strict; use warnings; use FindBin (); use lib do { (my $dir=$FindBin::Bin)=~s|/foo/|/bar/|; $dir };

    This can also be used with taint mode to untaint the value of $FindBin::Bin:

    #!/usr/bin/perl -T use strict; use warnings; use FindBin (); use lib do { $FindBin::Bin=~m|^(/.*)| or die "Can't find myself"; "$1/ +../lib" };

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (3)
As of 2014-09-17 04:15 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (57 votes), past polls