my $sequence_number = shift || die ...; # technically, you want 'or' instead of '||' here open (ERROR, "/usr/bin/errpt -g -l $sequence_number |"); # you don't check to see if it opened properly... # nor do you ensure the safety of the variable # if I enter '; rm -rf' here, you're in trouble my ($sequence_number) = shift =~ /(\d+)/ or die ...; open ERROR, "/usr/bin/errpt -g -l $sequence_number |" or die "can't run errpt -g -l $sequence_number: $!";