我所有的Perl文件都以/ home / UserName / lib use命令开头。有没有办法从我所有的.pl文件中消除硬编码的UserName?我想简化针对不同用户和不同域的网站复制。这是一个Perl模板网站,该网站从URL中获取cfg = UserName参数,并根据特定的用户格式呈现该网站。但是所有用户的lib文件都一样!
您可以改用这样的东西吗?使用lib'./lib'; 抱歉,我对perl编程的了解非常有限。
例:
use lib '/home/UserName/lib';
use RT::RealTime;
use RT::Site;
....
Run Code Online (Sandbox Code Playgroud)
任何可以提供帮助的人都会感激不尽。
如果我正确理解了您的要求,一种方法是
use warnings;
use strict;
my $user_name;
BEGIN { $user_name = $ENV{USER} }
use lib "/home/$user_name/lib";
# use packages from that path...
Run Code Online (Sandbox Code Playgroud)
这将设置运行脚本的用户的用户名。
更好的是,在这种特殊情况下,实际上不需要使用BEGIN,因为%ENV是解释器尽早设置的全局变量,因此您可以简单地说
use lib "/home/$ENV{USER}/lib";
Run Code Online (Sandbox Code Playgroud)
要么
use lib "$ENV{HOME}/lib"
Run Code Online (Sandbox Code Playgroud)
但是,这不能满足许多其他相关需求,这就是为什么我(首先)展示了一种方法来解决在编译时无法传递给我们的问题的原因BEGIN。
在这种情况下,周围的小舞BEGIN如下。将use在编译时运行,所以$user_name必须已经可用; 因此,我们将其设置在BEGIN必须使用该变量的语句之前的块中use。但是,我们需要在块外部声明变量(这my是一个编译时语句)。
然后可以将所有内容包装在另一个块中,将代码从before my $user_name到after 包围起来user lib...,以限定该$user_name变量的范围,以便在文件的其余部分中看不到该变量。
另一个选择似乎是将这些软件包简单地移动到用户无关的位置,然后您在该use lib 语句中不需要用户名...?
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |