NAME

File::MultilineGrep - Match multiple line block delimited by start/stop pattern

SYNOPSIS

use File::MultilineGrep;

file_multiline_grep ($begin_pattern
                   , $finish_pattern
                   , $middle_pattern
                   , $numeration
                   , $input_file
                   , $output_separator);

DESCRIPTION

To be considered text files having repeated structures. These structures possess repeated start delimiter, optional stop delimiter and variable contents. That is some or all fields of these structures are optional. A task is to select all whole structures, that contain a specified pattern. This can be done using a multiline regular expressions. But there is a performance issue: Processing time using regular expression is not directly proportional to amount of structures, so that increasing of this amount might cause the reqular expression will never finish. Processing time of the proposed function is directly proportional to amount of structures.

SUBROUTINES

file_multiline_grep

file_multiline_grep( $begin_pattern      #                     regular expression
                   , $finish_pattern     # optional parameter, regular expression
                   , $middle_pattern     #                     regular expression
                   , $numeration         # if false - not enumerate output lines
                   , $input_file         # optional parameter
                                         # if false - read from STDIN
                   , $output_separator); # optional parameter

EXAMPLE

use File::MultilineGrep;

file_multiline_grep ('person_id'
                   , 'end_person'
                   , 'Giant'
                   , 'enumerate_lines'
                   , 'most_famous_people'
                   , '------

reads all records from a file 'most_famous_people' (where line enumeration doesn't belong to the file):

 1 person_id  - 001
 2 profession - Prophet
 3 first name - Moses
 4 birthyear  - 1391 BCE
 5 end_person    
 6    ...
 7 person_id  - 002
 8 profession - Giant
 9 first name - Samson
10 birthyear  - Unknown
11 end_person   
12    ...
13 person_id  - 003
14 profession - King
15 first name - David
16 birthyear  - 1040 BCE
17 end_person   
18    ...
19 person_id  - 004
20 profession - Giant
21 first name - Goliath
22 birthyear  - 135  BCE
23 end_person   

that begin with 'person_id', finish with 'end_person' and contain a pattern 'Giant':

  7: person_id  - 002 
  8= profession - Giant
  9: first name - Samson
 10: birthyear  - Unknown
 11: end_person
------
 19: person_id  - 004 
 20= profession - Giant
 21: first name - Goliath
 22: birthyear  - 135  BCE 
 23: end_person
------

AUTHOR

Mart E. Rivilis, rivilism@cpan.org

BUGS

Please report any bugs or feature requests to bug-file-multilinegrep at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=File-MultilineGrep. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

SUPPORT

You can find documentation for this module with the perldoc command.

perldoc File::MultilineGrep

You can also look for information at:

LICENSE AND COPYRIGHT

Copyright 2013 Mart E. Rivilis.

This program is free software; you can redistribute it and/or modify it under the terms of the the Artistic License (2.0).