You appear to be passing the commands in to the standard input of the program. If there isn't a good reason for that then you can pass them on the command line:
my ($command1, $command2, $command3) = @ARGV;
$command2 = 'default' unless defined $command2;
$command3 = 'hoo hah' unless defined $command3;
# OR
my $command1 = shift or die; # Ideally call a subroutine to print usag
+e and die
my $command2 = shift || 'default';
my $command3 = shift || 'hoo hah';
If you have to read from STDIN then you can check to see if it still has stuff available using the eof function:
my $command1 = <STDIN>; chomp($command1);
my ($command2, $command3) = ('default', 'hoo hah');
unless (eof(STDIN)) {
$command2 = <STDIN>; chomp $command2;
unless (eof(STDIN)) {
$command3 = <STDIN>; chomp $command3;
}
}
-ben