簡體   English   中英

如何從一個perl模塊調用子例程到另一個perl模塊?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM