Я не мог понять, что именно делает "W".
my $x = "this is my string"; print unpack("W",substr($x,0,1));
Отпечатки: 116
my $x = "this is my string"; print unpack("W",$x);
Фотографии: 116
From perldoc : W An unsigned char value (can be greater than 255).
W An unsigned char value (can be greater than 255).
Оба ваших примера возвращают одно и то же, поскольку аргумент unpack "W" использует только один символ.Попробуйте "W*" вместо.
"W"
"W*"