2011-08-08 72 views
4

我正在嘗試學習Devel::Declare以嘗試重新實現類似PDL::NiceSlice而沒有源過濾器。當我注意到它正在刪除腳本中的下一行時,我正在到某處。爲了說明我已經做了這個最簡單的例子,其中人們可以使用關鍵字comment從代碼中刪除整行,即使在該行上有大量裸語,也可以進行編譯。Devel :: Declare從腳本中刪除行

​​

#!/usr/bin/env perl 
#test.pl 

use strict; 
use warnings; 

use Comment; 

comment stuff; 

print "Print 1\n"; 
print "Print 2\n"; 

僅產生

Print 2 

我失去了什麼?

P.S.如果我想知道這個問題,我可能會在D::D上提出幾個問題,所以提前致謝!

回答

3

好吧,所以我明白了。使用perl -MO=Deparse test.pl你:

use Comment; 
use warnings; 
use strict 'refs'; 
comment("Print 1\n"); 
print "Print 2\n"; 
test.pl syntax OK 

它告訴我,如果強制comment函數被調用。經過一些實驗後,我發現我可以將輸出設置爲明確呼叫comment(),以便它不會在接下來的任何事情上調用comment

sub parser { 
    Devel::Declare::set_linestr("comment();"); 
} 

使得deparse是:

use Comment; 
use warnings; 
use strict 'refs'; 
comment(); 
print "Print 1\n"; 
print "Print 2\n"; 
test.pl syntax OK 

和適當的輸出了。