[英]How to call a subroutine from one perl module to another perl module?
我有一個perl文件,其中使用了兩個perl模塊A.pm,B.pm。
但是在B.pm中,我需要調用A.pm的子例程。 即使我在A.pm中使用並嘗試使用它,我仍然會收到未定義的錯誤。
任何幫助對此深表感謝。
有兩個元素-首先是找到模塊。 Perl有一個“庫”路徑,您可以通過以下方式找到:
print join ( "\n", @INC );
這是它看起來的地方。 它還會檢查當前的工作目錄,但是使用運行時相對路徑會更加困難-為此,您需要使用FindBin
模塊。
第二個元素是導入和導出子例程。 默認情況下,如果您use A;
您不會將所有內容導入本地名稱空間,因為...您不想意外覆蓋您的內部函數之一。 那就是瘋狂。
所以你要么:
use A qw ( somefunction );
它將“插入”該函數並在您的本地名稱空間中對其進行定義。 這些事情的確切行為可以通過Exporter
並設置@EXPORT
和@EXPORT_OK
進行修改。
或通過“打包路徑”進行引用。
A::somefunction(@arguments);
這也適用於變量,盡管您必須將變量的作用域設為our
而不是my
。
未定義的錯誤可能是因為您的B.PM無法找到A.PM。 你可以嘗試使用
use FindBin;
use lib "$FindBin::Bin/../lib";
或直接use lib "$folder containing A.pm"
另外,我不清楚你在哪里不確定。 在您的perl腳本中還是在B.PM模塊中?
我只想直接從perl模塊(File :: Glob :: Windows)調用子(glob),而不必導入子glob,因為它與Moose沖突,並出現錯誤“用訪問器覆蓋本地定義的函數”。
這為我指明了正確的方向: https : //www.perlmonks.org/?node_id=623567
use File::Glob::Windows qw(); # Hide everything
...
File::Glob::Windows::glob(...); # Access sub explicitly
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.