No nested loops are required. Create a hash whose keys are the lines of 'schedule' and whose values indicate whether or not the corresponding line exists in $wave. (untested:)
use strict;
use warnings;
use autodie;
open my $schedule, '<', 'schedule_file.txt';
my %schedule;
$schedule{$_} = 1 while (<$schedule>);
close $schedule;
open my $search, '<', 'search_file.txt';
my %search;
$search{$_} = exists $schedule{$_} while (<$search>);
close $search;
my @yes = ('','yes');
my $regex = qr/tbsl/;
open my $keywrds, '<', 'keywrds.txt';
open my $wave, '>', 'wavefile.txt';
while (<$keywrds>) {
if (exists($search{$_}) and (/$regex/) ) {
print $wave $_, ' ', $yes[$search{$_}], "\n";
}
}
close $wave;
close $keywrds;