2017-06-05 56 views
0

想象我的劇本有這兩種潛艇使用Perl模塊,當它在子程序中需要

sub with_json_mod{ 
    use JSON::Tiny; 
    blah blah blah; 
} 

sub without_json_mod{ 
    blah blah blah; 
} 

我只想用「without_json_mod」 JSON ::微小未安裝時。

如果JSON :: Tiny未安裝,並且我想使用without_json_mod子項,我該如何讓Perl不會失敗?

席力圖召「規定」中的「with_json_mod」,它似乎工作,但是當我試着讓它導入encode_json子在

sub with_json_mod{ 
    require JSON::Tiny qw/encode_json/; 
    blah blah blah; 
} 

謝謝

這是行不通的
+0

'eval「use Module; 1」?' –

+0

我認爲eval會受到影響,因爲'use'是編譯時的東西。 – Sobrique

+0

是的,我正在考慮用'eval'來測試它,但很快就發表了評論,但你在答案中已經完美地總結了它。 @Sobrique –

回答

6

userequire之間的兩個主要區別。

  1. use發生在編譯時和require發生在運行時。
  2. use在加載的包中調用import()方法(如果存在的話)並且require沒有。

所以你需要添加一個電話到import()

sub with_json_mod{ 
    require JSON::Tiny; 
    JSON::Tiny->import('encode_json'); 
    blah blah blah; 
}