Your code is correct except for mistakes already corrected. It is still very confusing. Your $indx is one off from the array index therefore odd and even are the opposite of what a Perl programmer expects. Your $ind is an alias for an array element. This is what you intend, but readers can easily overlook that point. (You may be that confused reader in a few weeks.) A clearer style loops on the index and makes the indexing explicit.
use strict;
use warnings;
my @a = ( 1, 10, 5, 345, 2, 12 );
foreach my $indx (0..$#a) {
next if !($indx % 2);
$a[$indx] = sprintf '0x%x', $a[$indx];
}
print "final conversion input array = @a\n";
OUTPUT:
final conversion input array = 1 0xa 5 0x159 2 0xc