my %session_params = ( hostname => $ARGV[0], port => $ARGV[6], version => $ARGV[5] ? "snmpv" . $ARGV[5] : '', timeout => $ARGV[7], ... # and so on for all params }; for ( keys( %session_params ) { delete( $session_params{$_} unless $session_params{$_}; } my ( $session, $error ) = Net::SNMP->session( %session_params ); # Update: # allowed for an empty string for an arg that was being manipulated: $ARGV[5] #### #!/usr/bin/perl use strict; use warnings; use Data::Dumper; my $foo = 1; my $bar = 'baz'; my $baz = ''; my %foohash = ( $foo ? ( foo => $foo ) : (), bar => $bar, $baz ? ( baz => $baz ) : (), $ARGV[0] ? ( version => 'snmpv' . $ARGV[0] ) : () ); print Dumper(\%foohash); exit; __END__ Output: $VAR1 = { 'bar' => 'baz', 'foo' => 1 };