#!/usr/bin/env perl use utf8; ############################################################################### # This program copies the first few and last few lines of stdin to stdout # # Copyright © 2020 Richard Lesh. All rights reserved. ############################################################################### use Utils; use strict; use warnings; MAIN: { binmode(STDOUT, ":utf8"); binmode(STDERR, ":utf8"); binmode(STDIN, ":utf8"); foreach my $arg (@ARGV) { utf8::decode($arg); } my $max_lines = 10; if (scalar(@ARGV) == 1) { $max_lines = Utils::stoiWithDefault($ARGV[0], 10); } my $buffer = [(undef) x $max_lines]; my $line; my $count = 0; while ($line = ) { chomp($line); $buffer->[$count % $max_lines] = $line; if ($count < $max_lines) { print $line, "\n"; } ++$count; } if ($count > $max_lines && $count <= 2 * $max_lines) { my $REMAINING = $count - $max_lines; for (my $i = 0; $i < $REMAINING; ++$i) { print $buffer->[$i], "\n"; } } elsif ($count > 2 * $max_lines) { print "...\n"; for (my $i = 0; $i < $max_lines; ++$i) { print $buffer->[($count + $i) % $max_lines], "\n"; } } }