OVERVIEW
The premise is that each file is a repository of zero or more resources. Each resource contains zero or more lines of text, which ack will process.
For the basic text file that ack handles now, it's simple: Each text file is a repository that has one resource. The repository and resource are the same.
You can look at Repository.pm and Resource.pm and see how I'm calling it. It's really simple, and there's a lot of overhead.
Maybe now's the time for me to work on Plugin.pod. :-)
STRUCTURE
Say you have code that will let you search through DLL files.
App/Ack/Plugin/DLL.pm
package App::Ack::Plugin::DLL;
package App::Ack::Resource::DLL;
our @ISA = qw( App::Ack::Resource );
package App::Ack::Repository::DLL;
our @ISA = qw( App::Ack::Repository );