in reply to Creating a binary file problem

The string 0x00000019 is indeed not a number. The integer produced by Perl code 0x00000019 is a number (25), but the string is being passed to pack, not a Perl parser. hex and oct can convert such strings to numbers.

use strict; use warnings; use feature qw( say ); use Scalar::Util qw( looks_like_number ); my $i = 0x00000019; my $s = '0x00000019'; say $i; say $s; say '---'; say looks_like_number($i) ? 'yes' : 'no'; say looks_like_number($s) ? 'yes' : 'no'; say '---'; say 0+$i; say 0+$s; say '---'; say $i =~ /^0/ ? oct($i) : $i; say $s =~ /^0/ ? oct($s) : $s;
25 0x00000019 --- yes no --- 25 Argument "0x00000019" isn't numeric in addition (+) at x.pl line 21. 0 --- 25 25

So you want

pack('C', hex($gBuf{$bName}[$i]))