Avoid needless slurping. Use while (<DATA>) instead of introducing an extra variable, slurping into it and using a for loop.
Slurping complicates the code (there are more moving parts), it doesn't scale well, it obscures the intent of the code because it decouples line reading from line processing, and it probably doesn't offer any useful efficiency gains (which shouldn't be a consideration in the first place).
You code could be "cleaned up" as:
#!/usr/bin/env perl
use strict;
use warnings;
my @code_file;
my @var_file;
my $label_line;
while (<DATA>) {
if (/\s+EQU\s+\*/) {
$label_line = $_;
next;
}
next if ! $label_line;
push @{/\A\s*DC/ ? \@var_file : \@code_file}, "$label_line$_";
$label_line = '';
}
print join "\n", "CODE_FILE:", @code_file, "VARIABLE_FILE:", @var_file
+;
__DATA__
LABEL#1 EQU *
$MAC ABORT
LABEL#2 EQU *
$NOT UPDATE,STOP
T#TAB1 EQU *
DC AL4(-1)
True laziness is hard work