in reply to split on every n lines
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
|
|---|