my $cmd = '/usr/bin/strings /etc/passwd'; open my $handle, "$cmd |" or die "open: $cmd: $!\n"; # read at least one line while ( <$handle> ) { last; } close $handle or die "$cmd; exit code($?): $!\n"; #### #!/usr/bin/perl # vi:ts=4 sw=4 et: use strict; use warnings; # these are available commands my %cmd = ( 'cat' => '/bin/cat', 'less' => '/usr/bin/less', 'more' => '/bin/more', 'strings' => '/usr/bin/strings', ); my $textfile = '/etc/passwd'; for my $k ( keys %cmd ) { my $success = 0; for ( 1 .. 100 ) { $success += open_close_pipe( $cmd{$k} ); } print "$cmd{$k}: $success/100 successful!", $/; } sub open_close_pipe { my $ext_cmd = shift; my $cmd = "$ext_cmd $textfile"; open my $handle, "$cmd |" or die "open: $cmd: $!\n"; # read at least one line while ( <$handle> ) { last; } close $handle or do { #warn "exitcode($?): $cmd: $!\n"; # to see exit code ... return 0; }; return 1; } __END__ #### $ perl read2.pl /bin/cat: 100/100 successful! /usr/bin/less: 38/100 successful! /bin/more: 31/100 successful! /usr/bin/strings: 40/100 successful! #### $ perl read2.pl /bin/cat: 100/100 successful! /usr/bin/less: 16/100 successful! /bin/more: 26/100 successful! /usr/bin/strings: 32/100 successful! #### $ perl read2.pl /bin/cat: 35/100 successful! /usr/bin/less: 0/100 successful! /bin/more: 41/100 successful! /usr/bin/strings: 37/100 successful! #### $ perl read2.pl /bin/cat: 100/100 successful! /usr/bin/less: 100/100 successful! /bin/more: 100/100 successful! /usr/bin/strings: 100/100 successful!