在我的应用程序中,我将所有模块放在一个目录中,让我们调用它 libx.由于用户可以选择部署应用程序的位置,因此我不想对lib路径进行硬编码.
所以在开始时myapp.pl,我编写了以下代码行.
#! /usr/bin/perl -w
use strict;
my $curr_dir = $0;
my $curr_lib = $curr_dir;
$curr_lib =~ s/myapp\.pl/libx/;
use $curr_lib ;
Run Code Online (Sandbox Code Playgroud)
我得到了编译错误,而不是得到我期待的东西!
那我的代码出了什么问题?我不想在使用时硬编码lib路径use lib,我该怎么做?
对不起,我忘了在部署应用程序时提及它,myapp.pl并且libx位于同一目录中.
yst*_*sth 15
使用是在编译时发生的,而不是在运行时发生的,所以你的变量还没有设置好.你可以做:
my $curr_lib;
BEGIN {
$curr_lib = $0;
$curr_lib =~ s/myapp\.pl/libx/;
}
use lib $curr_lib;
Run Code Online (Sandbox Code Playgroud)
或者你可以:
use FindBin;
use lib "$FindBin::Bin/libx";
Run Code Online (Sandbox Code Playgroud)