#!/usr/bin/perl -w use Getopt::Std; sub stage1 { my $out; open $out,"|$0 -m2" or die "Can't fork.\n"; while () { chomp; printf $out "S1>%s\n",$_; } close $out; } sub stage2 { my $out; open $out,"|$0 -m3" or die "Can't fork.\n"; while () { chomp; printf $out "S2>%s\n",$_; } close $out; } sub stage3 { my $out; open $out,"|$0 -m4" or die "Can't fork.\n"; while () { chomp; printf $out "S3>%s\n",$_; } close $out; } sub stage4 { while () { chomp; printf "S4>%s\n",$_; } } my %mode = ( 1 => \&stage1, 2 => \&stage2, 3 => \&stage3, 4 => \&stage4, ); getopt("m:"); if (defined($opt_m)) { if (exists($mode{$opt_m})) { $mode{$opt_m}(); } else { die "Mode '$opt_m' undefined.\n"; } } else { die "usage: $0 -m \n"; }