http://www.perlmonks.org?node_id=993608


in reply to Re: How to push the previous line based on the current line to two different files.
in thread How to push the previous line based on the current line to two different files.

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