#!/usr/bin/perl use warnings; use strict; use feature qw{ say }; use autodie; use Text::CSV; sub build_regex { my ($filename) = @_; my @regexes; my $csv = 'Text::CSV'->new; open my $fh, '<', $filename; while (my $row = $csv->getline($fh)) { push @regexes, join '|', map quotemeta, @$row; } return join '|', @regexes } sub find_matches { my ($filename, $regex) = @_; my $csv = 'Text::CSV'->new; open my $fh, '<', $filename; while (my $row = $csv->getline($fh)) { /$regex/ and say for @$row; } } my ($f1, $f2) = qw( 1.csv 2.csv ); find_matches($f1, build_regex($f2));