2010-09-26 50 views
0

我用Google搜索了一種方法來做這種事情。爲什麼Perl在使用-I開關時找不到我的腳本?

我用這個shell命令:

perl -I/p2 maxconnect4.p1 arg1 arg2 arg3 arg4 

我的PL文件和文件下午都在 「P2」 目錄。

但是,它給了我一個錯誤:

Can't open perl script "maxconnect4.pl": No such file or directory 

任何人都可以解釋,爲什麼?

回答

5

你有兩個問題:

  1. 裝載require-I並不適用於在命令行上指定的文件,只有模塊或use

  2. 你不應該使用相對目錄與-I。如果您的腳本執行chdir,那麼該目錄現在相對於當前目錄的新的,而不是腳本啓動時的當前目錄。 (在許多情況下,你可以逃脫打破這個規則,因爲大多數情況下,模塊在腳本啓動時加載,在它改變目錄之前。)

    而且你實際上並沒有使用相對目錄,因爲你說-I/p2,這意味着要查找名爲/p2的目錄,而不是在當前目錄中的名爲p2的子目錄中(這正是你想說的)。

嘗試:

perl -I$PWD/p2 p2/maxconnect4.pl arg1 arg2 arg3 arg4 

(假設你使用的是Unix類型的外殼)。

在很多情況下,更好的解決方案是讓腳本自動設置@INC。在p2/maxconnect4.pl頂部(從p2加載任何模塊之前,放):

use FindBin; 
use lib $FindBin::Bin; 

use lib-I開關的程序版本,並FindBin告訴你的腳本程序所在的目錄的路徑名。那麼你可以說:

perl p2/maxconnect4.pl arg1 arg2 arg3 arg4 

而且根本就不用打擾-I

+0

是的,我應該絕對的目錄。非常感謝。有用。 – Fihop 2010-09-26 20:18:34

3

perl需要一個真正的文件來執行。你必須通過它的絕對或相對路徑來調用它:

perl -I p2 p2/maxconnect4.pl arg1 arg2 arg3 arg4 
+0

非常感謝。我已經試過你的方式。它給了我一個新的錯誤: – Fihop 2010-09-26 19:59:57

+0

錯誤:無法找到AiPlayer.pm in @INC – Fihop 2010-09-26 20:00:13

+0

如果我去目錄p2,並使用命令:perl maxconnect4.pl arg1 arg2 arg3 arg4。它運作良好。我想這是搜索路徑的問題。我對Perl完全陌生。非常感謝您的幫助。 – Fihop 2010-09-26 20:02:42

相關問題