我是 Perl 的新手,但我正在嘗試向 Sanoid ( https://github.com/jimsalterjrs/sanoid ) 添加一些功能,它是用 Perl 作為沒有 .pm 模塊檔案的單個腳本撰寫的(據我所知這些東西)。
我想將一些簡單的單元測驗添加到我添加的新子例程中,并且我希望能夠像在 Python 中一樣輕松地做到這一點,在 Python 中您可以只import使用其他檔案的名稱并測驗來自各種輸入的子例程回傳值。
我已經閱讀了許多測驗教程,并認為我遵循了如何進行實際測驗,但是我在匯入我想要測驗的腳本的第一個障礙中掙扎。
根據我的閱讀,匯入內容的主要方法是將其轉換為 .pm 模塊和use它,但我不想嘗試重新架構某人的代碼只是為了測驗(特別是當我對 Perl 很陌生時)。替代方案似乎是requireordo檔案,我理解它將執行檔案(這并不理想,因為即使在沒有引數的情況下呼叫它也會執行此操作)并且意味著我需要1;在檔案末尾添加 a 以確保它回傳需要時為真。
看起來我可以unless (caller)用來重新排列事物,以便如果它是required 則不執行任何操作,但我想檢查我是否錯過了一些明顯的東西。
uj5u.com熱心網友回復:
Perl 和 Python 在這里真的沒有區別。就像在 Python 中一樣,在 Perl 中將檔案作為模塊加載會執行它。
但就像在 Python 中一樣,您可以檢查模塊是否在 Perl 中作為腳本執行。
# Python
if __name__ == "__main__":
main()
# Perl
main() if !caller();
這樣的檔案稱為“模數”。
也就是說,我不喜歡這種做法(兩種語言)。如果你想要一個模塊,就寫一個模塊。這只是我的意見。
uj5u.com熱心網友回復:
嘿,我很久以前為此制作了一個工具,當時我不得不為人們轉換一堆東西:scriptdist。這是在程式上使用 Perl 工具鏈的快速修復。
然后,訣竅是能夠在不做任何事情的情況下加載腳本,直到您的測驗要求它這樣做,這就是ikegami 的 modulino 示例,您將所有頂級代碼包裝在一個子例程中,并且僅在 perl 認為該檔案時呼叫它作為程式運行。
我已經寫了很多:
- 腳本如何成為模塊
- 腳本作為模塊
- 使用 scriptdist 自動化分發
- 使用 modulinos 拯救遺留代碼
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/430878.html
