-1

我正在尝试执行一个 perl 脚本,并且当我在它所在的文件夹中运行它之前,我已经让它工作了......即,以下工作。

\higherFolder\folder>UpdateTestCasesScript.pl Test.feature Test_Cases.xls

当我尝试在该文件夹外部的命令行上运行此脚本时,Buuuuut

\HigherFolder>folder\UpdateTestCasesScript.pl RealFile.feature folder\Test_Cases.xls

我收到这个奇怪的错误:

Can't locate Spreadsheet/ParseExcel.pm in @INC <@INC contains: Spreadsheet/Parse
Excel.pl C:/Strawberry/perl/site/lib C:/strawberry/perl/vendor/lib C:/strawberry
/perl/lib .> at C:...\HigherFolder\folder\UpdateTestCasesScript.pl line 4

但是,如果您查看我脚本的前几行……它们如下:

#!/usr/bin/perl -w

use lib 'Spreadsheet/ParseExcel.pm';
use Spreadsheet::ParseExcel;

所以我有一个想法,它可能以某种方式查看了错误的@INC,但有人知道如何解决它吗?

谢谢!!!

4

2 回答 2

7

的参数use lib应该是包含的文件夹Spreadsheet/ParseExcel.pm,例如:

use lib '/higherFolder/folder';
于 2013-07-31T16:02:54.773 回答
2

.通常在 中@INC,使 Perl 在当前工作目录中查找模块。当您更改 CWD 时它停止工作,因为没有其他东西@INC允许它找到模块。

要在相对于脚本所在目录的目录中查找模块:

use FindBin qw( $RealBin );
use lib $RealBin;

顺便说一句,use lib 'Spreadsheet/ParseExcel.pm';没有任何意义。参数应该是所在的目录Spreadsheet/ParseExcel.pm(或多或少)。

于 2013-07-31T16:20:45.567 回答