【问题标题】:Adding an Include Path for a Module in a Simple Perl Tutorial在简单的 Perl 教程中为模块添加包含路径
【发布时间】:2010-06-11 16:42:55
【问题描述】:

我正在尝试做一个简单的教程,但我无法开始。我的问题似乎是安装和获取模块的正确路径。

**1。这是原始代码:*****

#!/usr/bin/perl -w
use strict;
use LWP 5.64;

my $browser = LWP::UserAgent->new;
my $url = 'http://www.cspan.org/RECENT.html';
my $response = $browser->get($url);

die "Can't get $url -- ", $response->status_line
    unless $response->is_success;

my $html = $response->content;
while( $html =~m/<A HREF=\"(.*?)\"/g ) {
    print "$1\n";

2。但在 Host Gator 中,他们这样说:

Perl 模块的位置

路径:/home/d********n/perl

使用您的 Perl 模块

您需要将 /home/d********n/perl 添加到包含路径。您可以通过将以下代码添加到您的脚本来做到这一点:

BEGIN {
    my $base_module_dir = (-d '/home/d********n/perl' ? '/home/d********n/perl' : ( getpwuid($>) )[7] . '/perl/');
    unshift @INC, map { $base_module_dir . $_ } @INC;
}

3。所以我添加了代码,但不知道我是否将它添加到了正确的位置。

#!/usr/bin/perl -w
use strict;
use LWP 5.64;

BEGIN {
    my $base_module_dir = (-d '/home/d********n/perl' ?

'/home/d********n/perl' : ( getpwuid($>) )[7] . '/perl/');
    unshift @INC, map { $base_module_dir . $_ } @INC;
}


my $browser = LWP::UserAgent->new;
my $url = 'http://www.cspan.org/RECENT.html';
my $response = $browser->get($url);

die "Can't get $url -- ", $response->status_line
    unless $response->is_success;

my $html = $response->content;
while( $html =~m/<A HREF=\"(.*?)\"/g ) {
    print "$1\n";

任何帮助将不胜感激。

仅供参考,我已经确保该文件具有所需的权限 755

此外,LWP::UserAgent 在 Host Gator 中的数量为 5.835。这是否意味着我必须改变

使用 LWP 5.64;

使用 LWP 5.835

【问题讨论】:

  • 很高兴看到您能够发布此内容。

标签: perl module include-path


【解决方案1】:

假设您已在本地模块目录中安装了 LWP,请将 BEGIN 块放在 您尝试加载 LWP 之前(就在 use strict 之后)。

原始代码中的版本号表示它是最低要求的版本。由于您的版本较新且 LWP 的界面稳定,因此简单的use LWP; 就足够了。

【讨论】:

  • 如果他在改编别人的剧本,那 5.64 是有原因的。您能否至少在您的回答中提到它是最低要求的版本?
  • 但要回答他的问题,他不需要更改版本号。如果原始教程说use LWP 5.64 ;# We need version 5.64 or later ,那就更清楚了
【解决方案2】:

Host Gator 的解决方案似乎有点复杂。我会使用 lib 模块:

use strict ;
use lib '/home/d********n/perl' ;
use LWP ;

如果您从命令行运行脚本,有两种方法可以原样运行。

通过在命令行输入以下内容将其设置为环境变量:

export PERL5LIB=/home/d********n/perl 
myscript.pl

或将其作为选项添加到 perl commaind

perl -I/home/d********n/perl myscript.pl

【讨论】:

  • 谢谢,我尝试了第一个选项,但没有成功:wildxtremes.com/cgi-bin/Tutorial14f.cgi 其他 2 个选项超出了我的想象。你能解释一下它们在代码中的位置吗?再次感谢
  • 另外cgi-bin不在根目录下,在另一个网站的子目录下,能不能改一下Include Path?
  • 您能否再给我们一些“没用”的细节。如果从命令行运行,产生的错误消息是什么。如果是 CGI 脚本,则写入服务器日志。
  • 您没有说您将它作为 CGI 运行。它看起来不像是打算那样使用,因为它不会产生任何 HTTP 标头或以 HTML 格式输出。
  • 啊,现在我觉得自己很愚蠢,但至少我在进步。感谢您的帮助。
【解决方案3】:

或者直接在命令行上使用 perl 选项参数标志 -I 例如。多个目录/项目也有一个通用模块

perl -I'../project/lib' -I'../otherProject/lib' -I'lib' -M'Test::Doctest'  -e run lib/MyOwnModule.pm

【讨论】:

    猜你喜欢
    • 2011-12-27
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 2010-09-26
    • 2022-10-08
    相关资源
    最近更新 更多