2013-07-31 10 views
-1

Я пытаюсь выполнить скрипт perl, и я получил его для работы до того, как запустил его в папке, в которой он находится. .. т. е. следующие работы.Не удается найти модуль perl в @inc, хотя сообщение об ошибке говорит о нем в @inc

\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, но есть ли у кого-нибудь идеи, как это исправить?

Спасибо !!!

ответ

2

. обычно в @INC, что делает Perl искать в текущей рабочей директории для модулей. Он прекратил работать, когда вы изменили CWD, потому что ничто в @INC не позволило ему найти модуль.

Для поиска модулей в относительно каталога, в котором сценарий находится:

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

Кстати, use lib 'Spreadsheet/ParseExcel.pm'; не имеет никакого смысла. Аргументом должен быть каталог, в котором находится Spreadsheet/ParseExcel.pm (более или менее).

7

Аргументом use lib должна быть папка, которая содержит Spreadsheet/ParseExcel.pm, например:

use lib '/higherFolder/folder'; 
Смежные вопросы