I've given other solutions as have others in this thread. You have an overly complex "if" code block. Your "else" layer is not needed. In this code version, there is something to be done with a JOB line, a SOMETHING line or a SOMETHING ELSE line. Otherwise the current line is printed with the current header prepended. Somewhere else in this thread I gave a solution where these sub-header tags were not fixed in advance but has the limitation that each sub-section must have exactly 4 lines of "other strings".
In general the better your specify the problem, the better the answers tend to be.
#!/usr/bin/perl use strict; use warnings; my $header =""; while (defined (my $line= <DATA>)) { next if $line =~ /^\s*$/; # skip blank lines chomp $line; if ($line =~ /^JOB::/) { print "$line\n"; } elsif ($line =~ /^Something\s*$|^Something Else\s*$/ ) { $header = $line; # don't print this line } else { print "$header $line\n"; #print line with current sub-header } } =PRINTS: JOB::HEREISASTRING Something StringA Something StringB Something StringC Something StringD Something Else StringE Something Else StringF Something Else StringG Something Else StringH JOB::HEREISANOTHERSTRING Something StringI Something StringJ Something StringK Something StringL Something Else StringM Something Else StringN Something Else StringO Something Else StringP =cut __DATA__ JOB::HEREISASTRING Something StringA StringB StringC StringD Something Else StringE StringF StringG StringH JOB::HEREISANOTHERSTRING Something StringI StringJ StringK StringL Something Else StringM StringN StringO StringP
In reply to Re^5: Loop Array - If $var is something write values until $var is something else
by Marshall
in thread Loop Array - If $var is something write values until $var is something else
by maikelnight
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |