my %Hash_To_Send = ( LI_VN_Mode => '00100011' , # 8 bit Stratum => '0' , # 8 bit Poll => '0' , # 8 bit Precision => '0' , # 8 bit Root_Delay => '0' , # 32 bit Dispersion => '0' , # 32 bit Reference_Identifier => '0' , # 32 bit Reference_Timestamp_Sec => '0' , # 32 bit Reference_Timestamp_Micro_Sec => '0' , # 32 bit Originate_Timestamp_Sec => '0' , # 32 bit Originate_Timestamp_Micro_Sec => '0' , # 32 bit Receive_Timestamp_Sec => '0' , # 32 bit Receive_Timestamp_Micro_Sec => '0' , # 32 bit Transmit_Timestamp_Sec => '0' , # 32 bit Transmit_Timestamp_Micro_Sec => '0' , # 32 bit ); my @keys = qw( LI_VN_Mode Stratum Poll Precision Root_Delay Dispersion Reference_Identifier Reference_Timestamp_Sec Reference_Timestamp_Micro_Sec Originate_Timestamp_Sec Originate_Timestamp_Micro_Sec Receive_Timestamp_Sec Receive_Timestamp_Micro_Sec Transmit_Timestamp_Sec Transmit_Timestamp_Micro_Sec ); # get values in ordered mode for call with positional parameters my @arraySendSntpPacket = @Hash_To_Send{@keys}; # hash slice! my $result; # two ways of calling: # positional parameters $result = positional_function( @arraySendSntpPacket ); # named parameters $result = named_param_function( %Hash_To_Send ); sub positional_function { my @args = @_; # do something with $args[0], $args[1], ... } sub named_param_function { my %args = @_; # flattened list of key/value pairs # do something with $args{LI_VN_Mode}, $args{Stratum}, ... }