#!/usr/bin/perl my (@strings) = qw(asdf as asdf foo); print hex_string(encode(@strings)) . "\n"; print join(", ", decode(encode(@strings))) . "\n"; print join(", ", decode(dehex_string(hex_string(encode(@strings))))) . "\n"; sub decode { my ($data) = @_; my ($count, $rest) = unpack("Na*",$data); my $unpack = "N/a" x $count; my (@data) = unpack($unpack,$rest); return (@data); } sub encode { my (@args) = @_; my $data = pack("N",scalar(@strings)); foreach my $string (@strings) { $data .= pack("N/a*",$string); } return ($data); } sub hex_string { my (@data) = unpack("C*",$_[0]); my $data; for (@data) { $data .= sprintf('%2.2X',$_); } return ($data); } sub dehex_string { my ($data) = @_; $data =~ s/([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; return ($data); }