2016-12-03 79 views
3

我傾向於經常使用Data :: Dumper,並且最終在我的.pl代碼的每個包的頂部都有以下樣板。Perl導入到我的所有包中?

use strict; 
use warnings; 
use Data::Dumper; 
$Data::Dumper::Deparse = 1; 
$Data::Dumper::Purity = 1; 

是否有一種方法來指定「在當前.pl文件中,我希望這些語句自動承擔。」

例如,我會

package foo; 
    use strict; 
    use warnings; 
    use Data::Dumper; 
    $Data::Dumper::Deparse = 1; 
    $Data::Dumper::Purity = 1; 

    my @localState = (1, 2, 3, 4, 5); 

    sub test { 
     print Dumper \@localState; 
    } 

package main; 
    use strict; 
    use warnings; 
    use Data::Dumper; 
    $Data::Dumper::Deparse = 1; 
    $Data::Dumper::Purity = 1; 

    foo->test; 

這可以迅速得到太多一成不變的重複和傷害可維護性。

不幸的是,我不能使用一個帶有「eval」的函數來調用所有這個樣板,因爲這個樣板將被放入函數中,而不是全局範圍; Perl沒有我知道的實際上具有非函數綁定eval-like bahavior的Lisp宏(我可能是錯的,如果Perl有lisp宏,那將非常酷)。

有沒有人知道如果這個行爲可以實現而無需編寫解析器來插入我的語句,如果它是在文件中聲明的第一個包?

回答

5

你可以建立你自己的工具箱模塊,打開雜注,加載模塊和設置東西,並加載它。模塊Import::Into我們很好。

Here is a blog post解釋瞭如何做到這一點。

但請注意,您正在設置的Data :: Dumper的配置實際上與您正在設置的包無關。這些是Data::Dumper包中的包變量,因此它們一直設置爲有效。在你的例子中,你基本上用相同的東西覆蓋它們。

在生產代碼中,除非有充分的理由,否則通常不應將多個軟件包放在一個文件中。但是這並沒有改變上述任何建議。

+1

這是一個鏈接唯一的答案,因爲我從我的手機寫它。稍後將添加代碼示例。 – simbabque

+0

非常有幫助,因爲它的立場:)我一直在思考如何避免在一個大型項目中跨越十幾個+腳本的半打+相同導入。到目前爲止,我沒有發現任何運作良好的東西,將很樂意檢查這一點! – zdim

+0

噢......這個_actually works_ - 它可以讓人想象,而且很簡單。謝謝。它解決了一個非常大的項目中非常棘手的問題。 – zdim