Well, the $ctr = 0 doesn't do anything useful, and the $ctr += 1 could be merged into the if conditional.
my @converted_list = map { sprintf('0x%04x', $_) } unpack('v*', $line)
+;
my $ctr;
foreach (@converted_list) {
print OUTFILE "$_, ";
print OUTFILE "\n" unless ++$ctr % 8;
}
You could merge of all that together if you so desired, but that's probably a bit odd.
my $ctr;
print map { ++$ctr % 8 ? "$_, " : "$_\n" }
map { sprintf('0x%04x', $_) }
unpack('v*', $line);
The simplest solution is probably to omit the counter altogether by only reading in 16 bytes at a time. As a bonus, it doesn't leave trailing comma when the file isn't an exact multiple of 16 bytes long.
# Each line has 8 16-bit words, so 16 bytes.
local $/ = \16;
while (<INFILE>) {
print join ', ',
map { sprintf('0x%04x', $_) }
unpack('v*', $_);
print("\n");
}
|