# convert hex string into a dec number
my $dec = hex($mac);
# revert into a hex string
$mac = sprintf("%012x", $dec+$add);
My argument is with the word "dec" there. It's not decimal. It's just a number. In fact, it's more binary than it is decimal. {grin}
The "hex" operator interprets a hex string or an octal string, converting them to a number. A number is an abstraction, without a numeric base, until it gets converted to a string again.
Thus, you never really have a "decimal" number there. Just a number. Because you never printed it out.