in reply to help needed with match multiple lines

If the data sample that you provided in this reply above is (part of) the content of a single data file, then you should have multiple lines printed for each file. I would try something like this (although actually, I think it would be worthwhile to try a real HTML parsing module, as recommended by others above):
use strict; opendir( DIR, "data" ); # use a variable if you need to handle differ +ent values my @files = grep /\.txt$/, readdir( DIR ); closedir DIR; warn scalar @files . " files to read\n"; open( OUT, ">", "list.txt" ) or die "list.txt: $!\n"; for my $file ( @files ) { local $/; # sets $/ to undef (locally) open( IN, $file ) or warn "$file: $!\n"; $_ = <IN>; # reads entire file because $/ is undef close IN; while ( m{<a href=.*?>(\w+)<.*?class="report"[^>]+>(\w+)<}sg ) { print OUT "$file -- $1 -- $2\n"; } }
(not tested)