# WARNING: THIS CODE HAS A SECURITY HOLE print "Which file to show? "; chomp( my $f = ); die "bad filename" if $f=~/\.\./; # don't allow updirs system("cat /sharedfiles/$f")==0 or die "command failed, \$?=$?"; #### system("cat", "/sharedfiles/$f")==0 or die "command failed, \$?=$?"; # OR system({"cat"} "cat", "/sharedfiles/$f")==0 or die "command failed, \$?=$?"; #### use IPC::Run3 0.047 'run3'; my $cmd = ['cat','-nE']; my $stdin = "Hello,\nWorld!\n"; run3 $cmd, \$stdin, \my $stdout, \my $stderr or die "run3 failed"; die "run3 failed, \$?=$?" unless $?==0; print "# STDOUT:\n$stdout"; print "# STDERR:\n$stderr"; #### use Capture::Tiny 'capture'; my ($stdout, $stderr, $exit) = capture { print "I am Perl!\n"; system "echo", "Hello,", "World!"; }; die "system failed, \$?=$exit" unless $exit==0; print "# STDOUT:\n$stdout"; print "# STDERR:\n$stderr"; #### use IPC::System::Simple qw/systemx capturex/; print "# systemx:\n"; systemx 'echo', 'Hello,', 'World!'; my $stdout = capturex 'echo', 'Hello,', 'World!'; print "# capturex: $stdout"; #### $ cat lengthsum.pl #!/usr/bin/env perl use warnings; use strict; use 5.022; # for double-diamond operator my $sum = 0; while (<<>>) { chomp; $sum+=length; } print "$sum\n"; $ cat /usr/share/dict/words | ./lengthsum.pl 839677 #### use 5.008; my @cmd = ('cat', '/usr/share/dict/words'); die '@cmd must have more than one element' unless @cmd>1; open my $fh, '-|', @cmd or die $!; my $sum = 0; while (<$fh>) { chomp; $sum+=length; } close $fh or die $! ? $! : $?; print "$sum\n"; #### use IPC::Run qw/ run new_chunker /; my @cmd = ('cat', '/usr/share/dict/words'); my $sum = 0; run \@cmd, '>', new_chunker("\n"), sub { my $line = shift; chomp($line); $sum+=length $line; } or die $?; print "$sum\n";