2013-07-21 22 views
1

我已經開始使用ack了,因爲它似乎很容易在Perl腳本中實現unix rgrep。想到這裏,我用它通過一個Perl 回引系統命令:在Perl腳本中使用Ack的正確方法?

# Searching for 'use' something 
my $pattern = "^use "; 
my $path = "./path/to/libs/"; 
#Only pm files 
my $parameters = "--perl"; 

my @uses = `ack $parameters $pattern $path`; 

我知道ack是純Perl的,但它似乎是專爲命令行使用,不喜歡的API或Perl模塊。有沒有一種方法來use它從一個Perl腳本,我的意思是一個模塊,使得可以使用ack像Perl函數:

# My phantasm 
use ack; 

my @uses = ack($parameters $pattern $path); 

...或者其他方法,timtowtdi

回答

2

你不能。

也許我應該在模塊中放置「沒有用戶可以使用的部件」。這實際上並不意味着以編程方式使用。它實際上只使用模塊來便於維護人員的可維護性,並且便於通過CPAN外殼進行安裝。

文件查找部分非常簡單。這只是從File :: Next調用迭代器。

爲什麼你想從另一個Perl程序內部調用ack的東西?你的用例是什麼?

也許這會更好地採取在ack-users mailing list over on Google Groups

+0

用例是建立類似[Module :: Extract :: Use](https://metacpan.org/module/Module::Extract::Use)的東西,但遞歸。我應該看看File :: Next ... – smonff

+1

是的,如果你只是在尋找給定類型的文件,那麼從File :: Next開始。你不是所有其他的哈哈哈都會把它帶到桌子上。至於你的具體用例,Maybe Module :: Depends :: Tree會有幫助嗎? http://search.cpan.org/dist/Module-Depends-Tree/ –

2

確認後面的模塊是App::Ack,但正如您從文檔中看到的那樣,它根本不是真正的編程接口,也不適用於公共消費。你可以跟安迪談一談,讓它變得更好,但是因爲你可能最好使用命令行或重新創建自己的命令。