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


in reply to New to Perl

If you want to split the lines in an input file by using number of '*'.Then,you can use the regular expression to match the lines and push lines into two separate array.You check the following code.In this,I used both substitute as well as split function to do it.

use strict; use warnings; use Data::Dumper; open FH,"<input" or die "can't open:$!"; #opening the input file my(@arr1,@arr2); #declaring the arrays to store those lines while(<FH>) { #reading line from a file one by one if(/\*[^*]+\*/) { #checking whether the line has two *'s in it push @arr1,$_ ; #pushing that line to an array1 } else { push @arr2,$_; #pushing that line to an array2 if it isn't having two +*'s in it } } close FH; #closing the file handle print "Lines with two *'s in it\n"; print @arr1; print "Lines with two *'s in it\n"; print @arr2;

Another Way

open FH,"<input" or die "can't open:$!"; #opening the input file while(<FH>) { #reading line from a file one by one if((split '\*',$_)==3) #splitting the line by using '*' and checking w +hether the split returns three which means three filds in it { push @arr1,$_ ; #pushing that line to an array1 } else { push @arr2,$_; #pushing that line to an array2 if it isn't having thre +e fields in it } } print "Lines with two *'s in it\n"; print @arr1; print "Lines with two *'s in it\n"; print @arr2; close FH; #closing the file handle