Interesting, the sprintf does make it do 00. I guess sprintf output tips the string flag? perl is v5.28.0 $ perl -E ' $var1 = sprintf("%02d", 0); say qq(var1 : $var1); $var2 = q(00); say qq(var2 : $var2)' var1 : 00 var2 : 00