我用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
任何人都可以解釋,爲什麼?
我用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
任何人都可以解釋,爲什麼?
你有兩個問題:
裝載require
-I
並不適用於在命令行上指定的文件,只有模塊或use
。
你不應該使用相對目錄與-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
。
perl
需要一個真正的文件來執行。你必須通過它的絕對或相對路徑來調用它:
perl -I p2 p2/maxconnect4.pl arg1 arg2 arg3 arg4
是的,我應該絕對的目錄。非常感謝。有用。 – Fihop 2010-09-26 20:18:34