#!/usr/bin/env perl use strict; use warnings; use autodie qw{:all}; my $tail_cmd = 'tail -f ./pm_test_file_to_tail'; my @tail_captures; print '*** Start reading from $tail_pipe at ', time, "\n"; my $tail_pid = open my $tail_pipe, '-|', $tail_cmd; { local $SIG{INT} = sub { kill INT => $tail_pid if kill 0 => $tail_pid; waitpid $tail_pid => 0; }; while (<$tail_pipe>) { push @tail_captures, $_; } } print '*** Stop reading from $tail_pipe at ', time, "\n"; # Possibly process data captured, e.g. for demo only $_ = uc for @tail_captures; print '*** Captured via $tail_pipe:', "\n"; print for @tail_captures; #### $ cat > pm_test_file_to_tail line 1 line 2 line 3 #### $ cat >> pm_test_file_to_tail line 4 line 5 #### $ pm_test_tail_pipe.pl *** Start reading from $tail_pipe at 1371707519 #### line 6 line 7 #### ^C*** Stop reading from $tail_pipe at 1371707542 *** Captured via $tail_pipe: LINE 1 LINE 2 LINE 3 LINE 4 LINE 5 LINE 6 LINE 7 #### line 8 line 9 #### $ cat pm_test_file_to_tail line 1 line 2 line 3 line 4 line 5 line 6 line 7 line 8 line 9