GitHub
CERT Secure Coding

INT00-PL. Do not prepend leading zeroes to integer literals

When representing numeric literal values, Perl has a simple rule: integers that are prefixed with one or more leading zeroes are interpreted as octal, and integers with no leading zero are interpreted as decimal.

While simple, this rule is not known among many developers and is not obvious to those unaware of it. Consequently, do not prefix an integer with leading zeros. If it is to be interpreted as octal, use the oct() function, which clearly indicates the number to be treated as octal.

my $perm1 = 0644;      # noncompliant, octal
my $perm2 = "0644";    # noncompliant, decimal
my $perm3 = oct("644");  # compliant, octal
my $perm4 = 644;       # compliant, decimal

Risk Assessment

RecommendationSeverityLikelihoodRemediation CostPriorityLevel
INT00-PLlowprobablemediumP4L3

Automated Detection

ToolDiagnostic
Perl::CriticValuesAndExpressions::ProhibitLeadingZeros
B::LintIllegal octal digit.*

Bibliography

[ Conway 2005 ]"Leading Zeroes," p. 58
[ CPAN ]Elliot Shank, Perl-Critic-1.116 ValuesAndExpressions::ProhibitLeadingZeros