Another way would be to grab five lines at a time from your input. The &groupsOf subroutine runs the code block given as the first argument on however many items at a time, second argument, of the third and subsequent arguments which in the code below are the lines of the input file. Given this tool:-
$ cat spw1081756tool.pl #!/usr/bin/perl # use strict; use warnings; use 5.014; say qq{$0 \@ARGV ->@ARGV<-}; $
Running this code:-
use strict; use warnings; use 5.014; sub groupsOf (&$@); open my $hostsFH, q{<}, \ <<EOD or die $!; host1 host2 host3 host4 host5 host6 host7 host8 host9 host10 host11 host12 EOD groupsOf { system q{spw1081756tool.pl}, map { chomp; $_ } @_; } 5, <$hostsFH>; close $hostsFH or die $!; sub groupsOf (&$@) { my $rcToRun = shift; my $groupsOf = shift; my $rcDoIt; $rcDoIt = sub { return $rcToRun->( map shift, 1 .. do { my $elems = scalar( @_ ); $groupsOf < $elems ? $groupsOf : $elems } ), @_ ? &$rcDoIt : (); }; return &$rcDoIt; }
Gives this output:-
./spw1081756tool.pl @ARGV ->host1 host2 host3 host4 host5<- ./spw1081756tool.pl @ARGV ->host6 host7 host8 host9 host10<- ./spw1081756tool.pl @ARGV ->host11 host12<-
I hope this is helpful.
Cheers,
JohnGG
In reply to Re: split on every n lines
by johngg
in thread split on every n lines
by sunil9009
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |