#/usr/bin/perl

# Usage: tgrep [-l] pattern [files]

# Handle
if ($ARGV[0] eq '-l') {
    shift;
    $action = <<'EOF';
	    print $file,"\n";
	    next FILE;
EOF
}
else {
    $action = <<'EOF';
	    print $file,":\t", $_;
EOF
}

# Get pattern and protect the delimiter we'll use.

$pat = shift;
$pat =~ s/!/\\!/g;

# Generate the program.

$prog = <<EOF;
FILE: foreach \$file (\@ARGV) {
    open(FILE,\$file) || do {
	print STDERR "Can't open \$file: \$!\\n";
	next;
    };
    next if -d FILE;    # ignore directories
    next if -B FILE;    # ignore binary files
    while (<FILE>) {
	if (m!$pat!) {
	    $action
	}
    }
}
EOF

# We often put in lines like this while developing scripts, so we
# can see what program the program is writing.

print $prog if $debugging;

# And finally, do it.

eval $prog;
die $@ if $@;