2013-07-21 4 views
1

Я начал использовать ack, потому что это, кажется, хороший способ реализовать unix rgrep в Perl-скрипте, легко. Думал, я использую его с помощью команды системы Perl обратно цитируемый:Правильный способ использования Ack внутри скриптов Perl?

# 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.

Почему вы хотите вызвать ack вещи изнутри другой программы Perl? Каков ваш прецедент?

Возможно, это было бы лучше рассмотрено на 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. Вы не все, что ухаживает за столом. Что касается вашего конкретного варианта использования, возможно, Module :: Depends :: Tree поможет? http://search.cpan.org/dist/Module-Depends-Tree/ –

2

Модуль позади ack - App::Ack, но, как вы можете видеть из документации, на самом деле это не какой-либо программный интерфейс, а не предназначенный для общественного потребления. Вы могли бы поговорить с Энди о том, чтобы сделать это лучше, но, возможно, вам лучше всего использовать командную строку или повторно изобрести свои собственные.

Смежные вопросы