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

suno has asked for the wisdom of the Perl Monks concerning the following question:

Hi,

I am working in a assembler tool ...my program is as follows:..

MAIN LR R1,R2 . . BALR R1,LABEL#1 L R1,VAR1, . . BAL R3,LABEL#2 . . EJECT LABEL#1 . . LABEL#2 . .

here what i want to do is, i have to split the program into many subroutines with BAL instuction as the split instuction... so my files will be like...

file1.... MAIN LR R1,R2 . . BALR R1,LABEL#1
file2... L R1,VAR1, . . BAL R3,LABEL#2
file3... . . EJECT
file4.LABEL#1... LABEL#1 . .
file5.LABEL#2... LABEL#2 . .
hope my question is clear....Can u please help me in this... and there may be n number of subroutines in my code.. i want the file names also to be generated automatically as FILE1,FILE2,..and so on...

Replies are listed 'Best First'.
Re: help for my tool...
by moritz (Cardinal) on Aug 22, 2012 at 14:45 UTC
Re: help for my tool...
by ig (Vicar) on Aug 22, 2012 at 19:39 UTC

    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: $!"; } }
      thanks for th help perl monks... it was really helpful...