There are various ways you could do this. One is to read the entire file into a string and then use split to break it into parts. You should read split carefully, it has many features.
use strict;
use warnings;
my $text = <<EOF;
MAIN
LR R1,R2
.
.
BALR R1,LABEL#1
L R1,VAR1,
.
.
BAL R3,LABEL#2
.
.
EJECT
LABEL#1
.
.
LABEL#2
.
.
EOF
my @parts = split(/^(BAL.*$)/m, $text);
my $n = 1;
open(my $fh, '>', "file$n") or die "file$n: $!";
foreach my $part (@parts) {
print $fh $part;
if($part =~ m/^BAL/) {
$n++;
open($fh, '>', "file$n") or die "file$n: $!";
}
}