#!/usr/bin/perl -w ## Demonstration using a pipe to send input to a child process use strict; use IPC::Run qw( start pump finish ); die "usage: $0 <num>\n\nwhere <num> is a positive integer\n" unless @ARGV; my $i = shift; die "\$i must be > 0, not '$i'" unless $i =~ /^\d+$/ && $i > 0; my $out; my $h = start ['bc'], '<pipe', \*IN, '>', \$out; my $tmp = select IN; $| = 1; select $tmp; print IN "a = i = $i ; i\n"; while () { $out = ''; pump $h until $out =~ s/.*?(\d+)\n/$1/g; print "bc said: $out\n"; if ( $out > $i ) { ## i! is always >i for i > 0 print "result = ", $out, "\n"; close(IN); last; } elsif ( $out == '1' ) { ## End of calculation loop, get bc to output the result print IN "a\n"; } else { print IN "i = i - 1 ; a = a * i ; i\n"; } } finish $h ;
Generated by dwww version 1.15 on Sat Jun 15 19:40:28 CEST 2024.