[{"data":1,"prerenderedAt":1064},["ShallowReactive",2],{"global-navigation":3,"page-\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fdeclarations-and-initialization-dcl\u002Fdcl03-pl":28,"surround-\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fdeclarations-and-initialization-dcl\u002Fdcl03-pl":680,"sidebar-sei-cert-perl-coding-standard":687},[4,8],{"title":5,"path":6,"_path":6,"fromAppConfig":7},"Home","\u002F",true,{"title":9,"path":10,"children":11,"_path":27,"fromAppConfig":7},"Coding Standards","\u002Fcoding-standards\u002F",[12,15,18,21,24],{"title":13,"path":14},"Android Coding Standard","\u002Fandroid-secure-coding-standard\u002F",{"title":16,"path":17},"C Coding Standard","\u002Fsei-cert-c-coding-standard\u002F",{"title":19,"path":20},"C++ Coding Standard","\u002Fsei-cert-cpp-coding-standard\u002F",{"title":22,"path":23},"Java Coding Standard","\u002Fsei-cert-oracle-coding-standard-for-java\u002F",{"title":25,"path":26},"Perl Coding Standard","\u002Fsei-cert-perl-coding-standard\u002F","\u002Fcoding-standards",{"id":29,"title":30,"body":31,"description":670,"extension":671,"meta":672,"navigation":7,"path":676,"seo":677,"stem":678,"__hash__":679},"content\u002F7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F2.declarations-and-initialization-dcl\u002F5.dcl03-pl.md","DCL03-PL. Do not read a foreach iterator variable after the loop has completed",{"type":32,"value":33,"toc":660},"minimark",[34,38,67,72,75,183,195,206,210,223,287,291,304,384,391,397,461,465,468,538,542,570,574,632,635,656],[35,36,30],"h1",{"id":37},"dcl03-pl-do-not-read-a-foreach-iterator-variable-after-the-loop-has-completed",[39,40,41,42,46,47,54,55,58,59,62,63,66],"p",{},"Perl's foreach loop will iterate over a list, assigning each value to ",[43,44,45],"code",{},"$_"," . But if another variable is provided, it assigns the list elements to that variable instead. According to the ",[48,49,53],"a",{"href":50,"rel":51},"http:\u002F\u002Fperldoc.perl.org\u002Fperlsyn.html",[52],"nofollow","perlsyn"," manpage, the foreach loop may be invoked with the ",[43,56,57],{},"foreach"," keyword or the ",[43,60,61],{},"for"," keyword. The foreach loop always localizes its iteration variable, which means the iteration variable does not preserve its value after the loop terminates. This can lead to surprising results if not accounted for. Consequently, it is recommended that the variable in a foreach loop be prefixed with ",[43,64,65],{},"my"," to make it explicit that the variable is private to the loop. And it is required that the variable not be read after the loop terminates.",[68,69,71],"h2",{"id":70},"noncompliant-code-example","Noncompliant Code Example",[39,73,74],{},"This noncompliant code example iterates through a list, stopping when it finds an even number.",[76,77,79],"code-block",{"quality":78},"bad",[80,81,86],"pre",{"className":82,"code":83,"language":84,"meta":85,"style":85},"language-perl shiki shiki-themes github-light github-dark monokai","my $value;\nmy @list = (1, 2, 3);\n\nfor $value (@list) {\n  if ($value % 2 == 0) {\n    last;\n  }\n}\n\nprint \"$value is even\\n\";\n","perl","",[43,87,88,100,108,114,122,131,140,146,152,157],{"__ignoreMap":85},[89,90,93,96],"span",{"class":91,"line":92},"line",1,[89,94,65],{"class":95},"sC2Qs",[89,97,99],{"class":98},"sMOD_"," $value;\n",[89,101,103,105],{"class":91,"line":102},2,[89,104,65],{"class":95},[89,106,107],{"class":98}," @list = (1, 2, 3);\n",[89,109,111],{"class":91,"line":110},3,[89,112,113],{"emptyLinePlaceholder":7},"\n",[89,115,117,119],{"class":91,"line":116},4,[89,118,61],{"class":95},[89,120,121],{"class":98}," $value (@list) {\n",[89,123,125,128],{"class":91,"line":124},5,[89,126,127],{"class":95},"  if",[89,129,130],{"class":98}," ($value % 2 == 0) {\n",[89,132,134,137],{"class":91,"line":133},6,[89,135,136],{"class":95},"    last",[89,138,139],{"class":98},";\n",[89,141,143],{"class":91,"line":142},7,[89,144,145],{"class":98},"  }\n",[89,147,149],{"class":91,"line":148},8,[89,150,151],{"class":98},"}\n",[89,153,155],{"class":91,"line":154},9,[89,156,113],{"emptyLinePlaceholder":7},[89,158,160,164,168,171,174,178,181],{"class":91,"line":159},10,[89,161,163],{"class":162},"sTrkL","print",[89,165,167],{"class":166},"sstjo"," \"",[89,169,170],{"class":98},"$value",[89,172,173],{"class":166}," is even",[89,175,177],{"class":176},"s7F3e","\\n",[89,179,180],{"class":166},"\"",[89,182,139],{"class":98},[39,184,185,186,188,189,191,192,194],{},"However, the loop treats the iteration variable ",[43,187,170],{}," as local. So when it exits the list, ",[43,190,170],{}," regains the value it had before the loop. Because it was uninitialized before the loop, it remains undefined afterwards, and the final ",[43,193,163],{}," statement prints:",[80,196,200],{"className":197,"code":198,"language":199,"meta":85,"style":85},"language-java shiki shiki-themes github-light github-dark monokai"," is even.\n","java",[43,201,202],{"__ignoreMap":85},[89,203,204],{"class":91,"line":92},[89,205,198],{"class":98},[68,207,209],{"id":208},"compliant-solution-expanded-loop","Compliant Solution (Expanded Loop)",[39,211,212,213,216,217,219,220,222],{},"This compliant solution correctly prints ",[43,214,215],{},"  2 is even "," . It accomplishes this result by moving the ",[43,218,163],{}," statement inside the loop and never refers to ",[43,221,170],{}," outside the loop.",[76,224,226],{"quality":225},"good",[80,227,229],{"className":82,"code":228,"language":84,"meta":85,"style":85},"my @list = (1, 2, 3);\n\nfor my $value (@list) {\n  if ($value % 2 == 0) {\n    print \"$value is even\\n\";\n    last;\n  }\n}\n",[43,230,231,237,241,250,256,273,279,283],{"__ignoreMap":85},[89,232,233,235],{"class":91,"line":92},[89,234,65],{"class":95},[89,236,107],{"class":98},[89,238,239],{"class":91,"line":102},[89,240,113],{"emptyLinePlaceholder":7},[89,242,243,245,248],{"class":91,"line":110},[89,244,61],{"class":95},[89,246,247],{"class":95}," my",[89,249,121],{"class":98},[89,251,252,254],{"class":91,"line":116},[89,253,127],{"class":95},[89,255,130],{"class":98},[89,257,258,261,263,265,267,269,271],{"class":91,"line":124},[89,259,260],{"class":162},"    print",[89,262,167],{"class":166},[89,264,170],{"class":98},[89,266,173],{"class":166},[89,268,177],{"class":176},[89,270,180],{"class":166},[89,272,139],{"class":98},[89,274,275,277],{"class":91,"line":133},[89,276,136],{"class":95},[89,278,139],{"class":98},[89,280,281],{"class":91,"line":142},[89,282,145],{"class":98},[89,284,285],{"class":91,"line":148},[89,286,151],{"class":98},[68,288,290],{"id":289},"compliant-solution-external-variable","Compliant Solution (External Variable)",[39,292,293,294,296,297,300,301,303],{},"This compliant solution preserves the value of ",[43,295,170],{}," by assigning it to a lexical variable defined outside the loop. It still declares ",[43,298,299],{},"$v"," to be private to the loop using ",[43,302,65],{}," .",[76,305,306],{"quality":225},[80,307,309],{"className":82,"code":308,"language":84,"meta":85,"style":85},"my @list = (1, 2, 3);\n\nmy $value;\nfor my $v (@list) {\n  if ($v % 2 == 0) {\n    $value = $v;\n    last;\n  }\n}\n\nprint \"$value is still even\\n\";\n",[43,310,311,317,321,327,336,343,348,354,358,362,366],{"__ignoreMap":85},[89,312,313,315],{"class":91,"line":92},[89,314,65],{"class":95},[89,316,107],{"class":98},[89,318,319],{"class":91,"line":102},[89,320,113],{"emptyLinePlaceholder":7},[89,322,323,325],{"class":91,"line":110},[89,324,65],{"class":95},[89,326,99],{"class":98},[89,328,329,331,333],{"class":91,"line":116},[89,330,61],{"class":95},[89,332,247],{"class":95},[89,334,335],{"class":98}," $v (@list) {\n",[89,337,338,340],{"class":91,"line":124},[89,339,127],{"class":95},[89,341,342],{"class":98}," ($v % 2 == 0) {\n",[89,344,345],{"class":91,"line":133},[89,346,347],{"class":98},"    $value = $v;\n",[89,349,350,352],{"class":91,"line":142},[89,351,136],{"class":95},[89,353,139],{"class":98},[89,355,356],{"class":91,"line":148},[89,357,145],{"class":98},[89,359,360],{"class":91,"line":154},[89,361,151],{"class":98},[89,363,364],{"class":91,"line":159},[89,365,113],{"emptyLinePlaceholder":7},[89,367,369,371,373,375,378,380,382],{"class":91,"line":368},11,[89,370,163],{"class":162},[89,372,167],{"class":166},[89,374,170],{"class":98},[89,376,377],{"class":166}," is still even",[89,379,177],{"class":176},[89,381,180],{"class":166},[89,383,139],{"class":98},[68,385,387,388,390],{"id":386},"compliant-solution-for","Compliant Solution ( ",[43,389,61],{}," )",[39,392,393,394,396],{},"This compliant solution uses the noniterative form of ",[43,395,61],{}," , which does no localization of its iteration variable.",[76,398,399],{"quality":225},[80,400,402],{"className":82,"code":401,"language":84,"meta":85,"style":85},"my @list = (1, 2, 3);\n\nfor ($value = 1; $value \u003C 4; $value++) {\n  if ($value % 2 == 0) {\n    last;\n  }\n}\n\nprint \"$value is still even\\n\";\n",[43,403,404,410,414,421,427,433,437,441,445],{"__ignoreMap":85},[89,405,406,408],{"class":91,"line":92},[89,407,65],{"class":95},[89,409,107],{"class":98},[89,411,412],{"class":91,"line":102},[89,413,113],{"emptyLinePlaceholder":7},[89,415,416,418],{"class":91,"line":110},[89,417,61],{"class":95},[89,419,420],{"class":98}," ($value = 1; $value \u003C 4; $value++) {\n",[89,422,423,425],{"class":91,"line":116},[89,424,127],{"class":95},[89,426,130],{"class":98},[89,428,429,431],{"class":91,"line":124},[89,430,136],{"class":95},[89,432,139],{"class":98},[89,434,435],{"class":91,"line":133},[89,436,145],{"class":98},[89,438,439],{"class":91,"line":142},[89,440,151],{"class":98},[89,442,443],{"class":91,"line":148},[89,444,113],{"emptyLinePlaceholder":7},[89,446,447,449,451,453,455,457,459],{"class":91,"line":154},[89,448,163],{"class":162},[89,450,167],{"class":166},[89,452,170],{"class":98},[89,454,377],{"class":166},[89,456,177],{"class":176},[89,458,180],{"class":166},[89,460,139],{"class":98},[68,462,464],{"id":463},"risk-assessment","Risk Assessment",[39,466,467],{},"Failure to localize iterators can lead to unexpected results.",[469,470,471,490],"table",{},[472,473,474],"thead",{},[475,476,477,480,482,484,486,488],"tr",{},[478,479],"th",{},[478,481],{},[478,483],{},[478,485],{},[478,487],{},[478,489],{},[491,492,493,514],"tbody",{},[475,494,495,499,502,505,508,511],{},[496,497,498],"td",{},"Recommendation",[496,500,501],{},"Severity",[496,503,504],{},"Likelihood",[496,506,507],{},"Remediation Cost",[496,509,510],{},"Priority",[496,512,513],{},"Level",[475,515,516,519,522,525,527,533],{},[496,517,518],{},"DCL03-PL",[496,520,521],{},"low",[496,523,524],{},"unlikely",[496,526,521],{},[496,528,529],{},[530,531,532],"strong",{},"P3",[496,534,535],{},[530,536,537],{},"L3",[68,539,541],{"id":540},"automated-detection","Automated Detection",[469,543,544,552],{},[472,545,546],{},[475,547,548,550],{},[478,549],{},[478,551],{},[491,553,554,562],{},[475,555,556,559],{},[496,557,558],{},"Tool",[496,560,561],{},"Diagnostic",[475,563,564,567],{},[496,565,566],{},"Perl::Critic",[496,568,569],{},"Variables::RequireLexicalLoopIterators",[68,571,573],{"id":572},"bibliography","Bibliography",[469,575,576,584],{},[472,577,578],{},[475,579,580,582],{},[478,581],{},[478,583],{},[491,585,586,599,619],{},[475,587,588,596],{},[496,589,590,591,595],{},"[ ",[48,592,594],{"href":593},"\u002Fsei-cert-perl-coding-standard\u002Fback-matter\u002Faa-bibliography#AA.Bibliography-Conway05","Conway 2005"," ]",[496,597,598],{},"\"Iterator Variables,\" p. 105",[475,600,601,607],{},[496,602,590,603,595],{},[48,604,606],{"href":605},"\u002Fsei-cert-perl-coding-standard\u002Fback-matter\u002Faa-bibliography#AA.Bibliography-CPAN","CPAN",[496,608,609,614,615],{},[48,610,613],{"href":611,"rel":612},"http:\u002F\u002Fsearch.cpan.org\u002F%7Eelliotjs\u002FPerl-Critic-1.116\u002F",[52],"Elliot Shank, Perl-Critic-1.116"," ",[48,616,569],{"href":617,"rel":618},"http:\u002F\u002Fsearch.cpan.org\u002Fdist\u002FPerl-Critic\u002Flib\u002FPerl\u002FCritic\u002FPolicy\u002FVariables\u002FRequireLexicalLoopIterators.pm",[52],[475,620,621,627],{},[496,622,590,623,595],{},[48,624,626],{"href":625},"\u002Fsei-cert-perl-coding-standard\u002Fback-matter\u002Faa-bibliography#AA.Bibliography-Manpages","Wall 2011",[496,628,629],{},[48,630,53],{"href":50,"rel":631},[52],[633,634],"hr",{},[39,636,637,614,644,614,650],{},[48,638,640],{"href":639},"\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fdeclarations-and-initialization-dcl\u002Fdcl02-pl",[641,642],"img",{"src":643},"\u002Fattachments\u002F88890562\u002F88892207.png",[48,645,647],{"href":646},"\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fdeclarations-and-initialization-dcl\u002F",[641,648],{"src":649},"\u002Fattachments\u002F88890562\u002F88892209.png",[48,651,653],{"href":652},"\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fdeclarations-and-initialization-dcl\u002Fdcl04-pl",[641,654],{"src":655},"\u002Fattachments\u002F88890562\u002F88892208.png",[657,658,659],"style",{},"html pre.shiki code .sC2Qs, html code.shiki .sC2Qs{--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}html pre.shiki code .sMOD_, html code.shiki .sMOD_{--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .sTrkL, html code.shiki .sTrkL{--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#66D9EF}html pre.shiki code .sstjo, html code.shiki .sstjo{--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .s7F3e, html code.shiki .s7F3e{--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}",{"title":85,"searchDepth":102,"depth":102,"links":661},[662,663,664,665,667,668,669],{"id":70,"depth":102,"text":71},{"id":208,"depth":102,"text":209},{"id":289,"depth":102,"text":290},{"id":386,"depth":102,"text":666},"Compliant Solution ( for )",{"id":463,"depth":102,"text":464},{"id":540,"depth":102,"text":541},{"id":572,"depth":102,"text":573},"Perl's foreach loop will iterate over a list, assigning each value to $_ . But if another variable is provided, it assigns the list elements to that variable instead. According to the perlsyn manpage, the foreach loop may be invoked with the foreach keyword or the for keyword. The foreach loop always localizes its iteration variable, which means the iteration variable does not preserve its value after the loop terminates. This can lead to surprising results if not accounted for. Consequently, it is recommended that the variable in a foreach loop be prefixed with my to make it explicit that the variable is private to the loop. And it is required that the variable not be read after the loop terminates.","md",{"tags":673},[674,675],"dcl","recommendation","\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fdeclarations-and-initialization-dcl\u002Fdcl03-pl",{"title":30,"description":670},"7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F2.declarations-and-initialization-dcl\u002F5.dcl03-pl","y4AinKRWLYpgZSetzM7QOXZHYZ2QCo1qvuJ8Q28Pqqo",[681,684],{"title":682,"path":639,"stem":683,"children":-1},"DCL02-PL. Any modified punctuation variable should be declared local","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F2.declarations-and-initialization-dcl\u002F4.dcl02-pl",{"title":685,"path":652,"stem":686,"children":-1},"DCL04-PL. Always initialize local variables","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F2.declarations-and-initialization-dcl\u002F6.dcl04-pl",[688],{"title":689,"path":690,"stem":691,"children":692},"SEI CERT Perl Coding Standard","\u002Fsei-cert-perl-coding-standard","7.sei-cert-perl-coding-standard\u002F1.index",[693,694,749,881,1020],{"title":689,"path":690,"stem":691},{"title":695,"path":696,"stem":697,"children":698},"Front Matter","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F1.index",[699,700,704],{"title":695,"path":696,"stem":697},{"title":701,"path":702,"stem":703},"Deprecations","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fdeprecations","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F2.deprecations",{"title":705,"path":706,"stem":707,"children":708},"Introduction","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fintroduction","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F3.introduction\u002F01.index",[709,710,714,718,722,726,730,734,737,741,745],{"title":705,"path":706,"stem":707},{"title":711,"path":712,"stem":713},"Scope","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fscope","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F3.introduction\u002F01.scope",{"title":715,"path":716,"stem":717},"Tool Selection and Validation","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fintroduction\u002Ftool-selection-and-validation","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F3.introduction\u002F02.tool-selection-and-validation",{"title":719,"path":720,"stem":721},"Rules versus Recommendations","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fintroduction\u002Frules-versus-recommendations","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F3.introduction\u002F03.rules-versus-recommendations",{"title":723,"path":724,"stem":725},"Development Process","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fdevelopment-process","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F3.introduction\u002F04.development-process",{"title":727,"path":728,"stem":729},"Usage","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fusage","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F3.introduction\u002F05.usage",{"title":731,"path":732,"stem":733},"System Qualities","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fsystem-qualities","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F3.introduction\u002F06.system-qualities",{"title":464,"path":735,"stem":736},"\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fintroduction\u002Frisk-assessment","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F3.introduction\u002F07.risk-assessment",{"title":738,"path":739,"stem":740},"Source Code Validation","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fsource-code-validation","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F3.introduction\u002F08.source-code-validation",{"title":742,"path":743,"stem":744},"Automatically Generated Code","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fautomatically-generated-code","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F3.introduction\u002F09.automatically-generated-code",{"title":746,"path":747,"stem":748},"Acknowledgements","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fintroduction\u002Facknowledgements","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F3.introduction\u002F11.acknowledgements",{"title":750,"path":751,"stem":752,"children":753},"Rules","\u002Fsei-cert-perl-coding-standard\u002Frules","7.sei-cert-perl-coding-standard\u002F3.rules\u002F1.index",[754,755,773,799,809,839,843,857,867],{"title":750,"path":751,"stem":752},{"title":756,"path":757,"stem":758,"children":759},"Declarations and Initialization (DCL)","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl","7.sei-cert-perl-coding-standard\u002F3.rules\u002F2.declarations-and-initialization-dcl\u002F1.index",[760,761,765,769],{"title":756,"path":757,"stem":758},{"title":762,"path":763,"stem":764},"DCL30-PL. Do not import deprecated modules","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl30-pl","7.sei-cert-perl-coding-standard\u002F3.rules\u002F2.declarations-and-initialization-dcl\u002F2.dcl30-pl",{"title":766,"path":767,"stem":768},"DCL31-PL. Do not overload reserved keywords or subroutines","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl31-pl","7.sei-cert-perl-coding-standard\u002F3.rules\u002F2.declarations-and-initialization-dcl\u002F3.dcl31-pl",{"title":770,"path":771,"stem":772},"DCL33-PL. Declare identifiers before using them","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl33-pl","7.sei-cert-perl-coding-standard\u002F3.rules\u002F2.declarations-and-initialization-dcl\u002F4.dcl33-pl",{"title":774,"path":775,"stem":776,"children":777},"Expressions (EXP)","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fexpressions-exp","7.sei-cert-perl-coding-standard\u002F3.rules\u002F3.expressions-exp\u002F1.index",[778,779,783,787,791,795],{"title":774,"path":775,"stem":776},{"title":780,"path":781,"stem":782},"EXP30-PL. Do not use deprecated or obsolete functions or modules","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp30-pl","7.sei-cert-perl-coding-standard\u002F3.rules\u002F3.expressions-exp\u002F2.exp30-pl",{"title":784,"path":785,"stem":786},"EXP31-PL. Do not suppress or ignore exceptions","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp31-pl","7.sei-cert-perl-coding-standard\u002F3.rules\u002F3.expressions-exp\u002F3.exp31-pl",{"title":788,"path":789,"stem":790},"EXP32-PL. Do not ignore function return values","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp32-pl","7.sei-cert-perl-coding-standard\u002F3.rules\u002F3.expressions-exp\u002F4.exp32-pl",{"title":792,"path":793,"stem":794},"EXP33-PL. Do not invoke a function in a context for which it is not defined","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp33-pl","7.sei-cert-perl-coding-standard\u002F3.rules\u002F3.expressions-exp\u002F5.exp33-pl",{"title":796,"path":797,"stem":798},"EXP35-PL. Use the correct operator type for comparing values","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp35-pl","7.sei-cert-perl-coding-standard\u002F3.rules\u002F3.expressions-exp\u002F6.exp35-pl",{"title":800,"path":801,"stem":802,"children":803},"File Input and Output (FIO)","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Ffile-input-and-output-fio","7.sei-cert-perl-coding-standard\u002F3.rules\u002F4.file-input-and-output-fio\u002F1.index",[804,805],{"title":800,"path":801,"stem":802},{"title":806,"path":807,"stem":808},"FIO30-PL. Use compatible character encodings when performing network or file I\u002FO","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Ffile-input-and-output-fio\u002Ffio30-pl","7.sei-cert-perl-coding-standard\u002F3.rules\u002F4.file-input-and-output-fio\u002F2.fio30-pl",{"title":810,"path":811,"stem":812,"children":813},"Input Validation and Data Sanitization (IDS)","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Finput-validation-and-data-sanitization-ids","7.sei-cert-perl-coding-standard\u002F3.rules\u002F5.input-validation-and-data-sanitization-ids\u002F1.index",[814,815,819,823,827,831,835],{"title":810,"path":811,"stem":812},{"title":816,"path":817,"stem":818},"IDS30-PL. Exclude user input from format strings","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Finput-validation-and-data-sanitization-ids\u002Fids30-pl","7.sei-cert-perl-coding-standard\u002F3.rules\u002F5.input-validation-and-data-sanitization-ids\u002F2.ids30-pl",{"title":820,"path":821,"stem":822},"IDS31-PL. Do not use the two-argument form of open()","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Finput-validation-and-data-sanitization-ids\u002Fids31-pl","7.sei-cert-perl-coding-standard\u002F3.rules\u002F5.input-validation-and-data-sanitization-ids\u002F3.ids31-pl",{"title":824,"path":825,"stem":826},"IDS32-PL. Validate any integer that is used as an array index","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Finput-validation-and-data-sanitization-ids\u002Fids32-pl","7.sei-cert-perl-coding-standard\u002F3.rules\u002F5.input-validation-and-data-sanitization-ids\u002F4.ids32-pl",{"title":828,"path":829,"stem":830},"IDS33-PL. Sanitize untrusted data passed across a trust boundary","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Finput-validation-and-data-sanitization-ids\u002Fids33-pl","7.sei-cert-perl-coding-standard\u002F3.rules\u002F5.input-validation-and-data-sanitization-ids\u002F5.ids33-pl",{"title":832,"path":833,"stem":834},"IDS34-PL. Do not pass untrusted, unsanitized data to a command interpreter","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Finput-validation-and-data-sanitization-ids\u002Fids34-pl","7.sei-cert-perl-coding-standard\u002F3.rules\u002F5.input-validation-and-data-sanitization-ids\u002F6.ids34-pl",{"title":836,"path":837,"stem":838},"IDS35-PL. Do not invoke the eval form with a string argument","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Finput-validation-and-data-sanitization-ids\u002Fids35-pl","7.sei-cert-perl-coding-standard\u002F3.rules\u002F5.input-validation-and-data-sanitization-ids\u002F7.ids35-pl",{"title":840,"path":841,"stem":842},"Integers (INT)","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fintegers-int","7.sei-cert-perl-coding-standard\u002F3.rules\u002F6.integers-int",{"title":844,"path":845,"stem":846,"children":847},"Miscellaneous (MSC)","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fmiscellaneous-msc","7.sei-cert-perl-coding-standard\u002F3.rules\u002F7.miscellaneous-msc\u002F1.index",[848,849,853],{"title":844,"path":845,"stem":846},{"title":850,"path":851,"stem":852},"MSC31-PL. Do not embed global statements","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fmiscellaneous-msc\u002Fmsc31-pl","7.sei-cert-perl-coding-standard\u002F3.rules\u002F7.miscellaneous-msc\u002F2.msc31-pl",{"title":854,"path":855,"stem":856},"MSC32-PL. Do not provide a module's version value from outside the module","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fmiscellaneous-msc\u002Fmsc32-pl","7.sei-cert-perl-coding-standard\u002F3.rules\u002F7.miscellaneous-msc\u002F3.msc32-pl",{"title":858,"path":859,"stem":860,"children":861},"Object-Oriented Programming (OOP)","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fobject-oriented-programming-oop","7.sei-cert-perl-coding-standard\u002F3.rules\u002F8.object-oriented-programming-oop\u002F1.index",[862,863],{"title":858,"path":859,"stem":860},{"title":864,"path":865,"stem":866},"OOP32-PL. Prohibit indirect object call syntax","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop32-pl","7.sei-cert-perl-coding-standard\u002F3.rules\u002F8.object-oriented-programming-oop\u002F2.oop32-pl",{"title":868,"path":869,"stem":870,"children":871},"Strings (STR)","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fstrings-str","7.sei-cert-perl-coding-standard\u002F3.rules\u002F9.strings-str\u002F1.index",[872,873,877],{"title":868,"path":869,"stem":870},{"title":874,"path":875,"stem":876},"STR30-PL. Capture variables should be read only immediately after a successful regex match","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fstrings-str\u002Fstr30-pl","7.sei-cert-perl-coding-standard\u002F3.rules\u002F9.strings-str\u002F2.str30-pl",{"title":878,"path":879,"stem":880},"STR31-PL. Do not pass string literals to functions expecting regexes","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fstrings-str\u002Fstr31-pl","7.sei-cert-perl-coding-standard\u002F3.rules\u002F9.strings-str\u002F3.str31-pl",{"title":882,"path":883,"stem":884,"children":885},"Recommendations","\u002Fsei-cert-perl-coding-standard\u002Frecommendations","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F1.index",[886,887,907,940,953,966,979,1004,1017],{"title":882,"path":883,"stem":884},{"title":756,"path":888,"stem":889,"children":890},"\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fdeclarations-and-initialization-dcl","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F2.declarations-and-initialization-dcl\u002F1.index",[891,892,896,900,901,902,903],{"title":756,"path":888,"stem":889},{"title":893,"path":894,"stem":895},"DCL00-PL. Do not use subroutine prototypes","\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fdeclarations-and-initialization-dcl\u002Fdcl00-pl","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F2.declarations-and-initialization-dcl\u002F2.dcl00-pl",{"title":897,"path":898,"stem":899},"DCL01-PL. Do not reuse variable names in subscopes","\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fdeclarations-and-initialization-dcl\u002Fdcl01-pl","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F2.declarations-and-initialization-dcl\u002F3.dcl01-pl",{"title":682,"path":639,"stem":683},{"title":30,"path":676,"stem":678},{"title":685,"path":652,"stem":686},{"title":904,"path":905,"stem":906},"DCL05-PL. Prohibit Perl4 package names","\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fdeclarations-and-initialization-dcl\u002Fdcl05-pl","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F2.declarations-and-initialization-dcl\u002F7.dcl05-pl",{"title":774,"path":908,"stem":909,"children":910},"\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fexpressions-exp","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F3.expressions-exp\u002F1.index",[911,912,916,920,924,928,932,936],{"title":774,"path":908,"stem":909},{"title":913,"path":914,"stem":915},"EXP00-PL. Do not return undef","\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fexpressions-exp\u002Fexp00-pl","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F3.expressions-exp\u002F2.exp00-pl",{"title":917,"path":918,"stem":919},"EXP01-PL. Do not depend on the return value of functions that lack a return statement","\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fexpressions-exp\u002Fexp01-pl","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F3.expressions-exp\u002F3.exp01-pl",{"title":921,"path":922,"stem":923},"EXP03-PL. Do not diminish the benefits of constants by assuming their values in expressions","\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fexpressions-exp\u002Fexp03-pl","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F3.expressions-exp\u002F4.exp03-pl",{"title":925,"path":926,"stem":927},"EXP04-PL. Do not mix the early-precedence logical operators with late-precedence logical operators","\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fexpressions-exp\u002Fexp04-pl","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F3.expressions-exp\u002F5.exp04-pl",{"title":929,"path":930,"stem":931},"EXP06-PL. Do not use an array in an implicit scalar context","\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fexpressions-exp\u002Fexp06-pl","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F3.expressions-exp\u002F6.exp06-pl",{"title":933,"path":934,"stem":935},"EXP07-PL. Do not modify $_ in list or sorting functions","\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fexpressions-exp\u002Fexp07-pl","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F3.expressions-exp\u002F7.exp07-pl",{"title":937,"path":938,"stem":939},"EXP08-PL. Do not use the one-argument form of select()","\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fexpressions-exp\u002Fexp08-pl","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F3.expressions-exp\u002F8.exp08-pl",{"title":800,"path":941,"stem":942,"children":943},"\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Ffile-input-and-output-fio","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F4.file-input-and-output-fio\u002F1.index",[944,945,949],{"title":800,"path":941,"stem":942},{"title":946,"path":947,"stem":948},"FIO00-PL. Do not use bareword file handles","\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Ffile-input-and-output-fio\u002Ffio00-pl","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F4.file-input-and-output-fio\u002F2.fio00-pl",{"title":950,"path":951,"stem":952},"FIO01-PL. Do not operate on files that can be modified by untrusted users","\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Ffile-input-and-output-fio\u002Ffio01-pl","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F4.file-input-and-output-fio\u002F3.fio01-pl",{"title":810,"path":954,"stem":955,"children":956},"\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Finput-validation-and-data-sanitization-ids","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F5.input-validation-and-data-sanitization-ids\u002F1.index",[957,958,962],{"title":810,"path":954,"stem":955},{"title":959,"path":960,"stem":961},"IDS00-PL. Canonicalize path names before validating them","\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Finput-validation-and-data-sanitization-ids\u002Fids00-pl","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F5.input-validation-and-data-sanitization-ids\u002F2.ids00-pl",{"title":963,"path":964,"stem":965},"IDS01-PL. Use taint mode while being aware of its limitations","\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Finput-validation-and-data-sanitization-ids\u002Fids01-pl","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F5.input-validation-and-data-sanitization-ids\u002F3.ids01-pl",{"title":840,"path":967,"stem":968,"children":969},"\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fintegers-int","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F6.integers-int\u002F1.index",[970,971,975],{"title":840,"path":967,"stem":968},{"title":972,"path":973,"stem":974},"INT00-PL. Do not prepend leading zeroes to integer literals","\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fintegers-int\u002Fint00-pl","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F6.integers-int\u002F2.int00-pl",{"title":976,"path":977,"stem":978},"INT01-PL. Use small integers when precise computation is required","\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fintegers-int\u002Fint01-pl","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F6.integers-int\u002F3.int01-pl",{"title":844,"path":980,"stem":981,"children":982},"\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fmiscellaneous-msc","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F7.miscellaneous-msc\u002F1.index",[983,984,988,992,996,1000],{"title":844,"path":980,"stem":981},{"title":985,"path":986,"stem":987},"MSC00-PL. Detect and remove dead code","\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fmiscellaneous-msc\u002Fmsc00-pl","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F7.miscellaneous-msc\u002F2.msc00-pl",{"title":989,"path":990,"stem":991},"MSC01-PL. Detect and remove unused variables","\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fmiscellaneous-msc\u002Fmsc01-pl","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F7.miscellaneous-msc\u002F3.msc01-pl",{"title":993,"path":994,"stem":995},"MSC02-PL. Run programs with full warnings and strict checking","\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fmiscellaneous-msc\u002Fmsc02-pl","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F7.miscellaneous-msc\u002F4.msc02-pl",{"title":997,"path":998,"stem":999},"MSC03-PL. Do not use select() to sleep","\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fmiscellaneous-msc\u002Fmsc03-pl","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F7.miscellaneous-msc\u002F5.msc03-pl",{"title":1001,"path":1002,"stem":1003},"MSC04-PL. Do not use comma to separate statements","\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fmiscellaneous-msc\u002Fmsc04-pl","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F7.miscellaneous-msc\u002F6.msc04-pl",{"title":858,"path":1005,"stem":1006,"children":1007},"\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fobject-oriented-programming-oop","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F8.object-oriented-programming-oop\u002F1.index",[1008,1009,1013],{"title":858,"path":1005,"stem":1006},{"title":1010,"path":1011,"stem":1012},"OOP00-PL. Do not signify inheritence at runtime","\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fobject-oriented-programming-oop\u002Foop00-pl","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F8.object-oriented-programming-oop\u002F2.oop00-pl",{"title":1014,"path":1015,"stem":1016},"OOP01-PL. Do not access private variables or subroutines in other packages","\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fobject-oriented-programming-oop\u002Foop01-pl","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F8.object-oriented-programming-oop\u002F3.oop01-pl",{"title":868,"path":1018,"stem":1019},"\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fstrings-str","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F9.strings-str",{"title":1021,"path":1022,"stem":1023,"children":1024},"Back Matter","\u002Fsei-cert-perl-coding-standard\u002Fback-matter","7.sei-cert-perl-coding-standard\u002F5.back-matter\u002F1.index",[1025,1026,1030,1060],{"title":1021,"path":1022,"stem":1023},{"title":1027,"path":1028,"stem":1029},"AA. Bibliography","\u002Fsei-cert-perl-coding-standard\u002Fback-matter\u002Faa-bibliography","7.sei-cert-perl-coding-standard\u002F5.back-matter\u002F2.aa-bibliography",{"title":1031,"path":1032,"stem":1033,"children":1034},"BB. Analyzers","\u002Fsei-cert-perl-coding-standard\u002Fback-matter\u002Fbb-analyzers","7.sei-cert-perl-coding-standard\u002F5.back-matter\u002F3.bb-analyzers\u002F1.index",[1035,1036,1040,1044,1048,1052,1056],{"title":1031,"path":1032,"stem":1033},{"title":1037,"path":1038,"stem":1039},"Critic","\u002Fsei-cert-perl-coding-standard\u002Fback-matter\u002Fbb-analyzers\u002Fcritic","7.sei-cert-perl-coding-standard\u002F5.back-matter\u002F3.bb-analyzers\u002F2.critic",{"title":1041,"path":1042,"stem":1043},"Critic_V","\u002Fsei-cert-perl-coding-standard\u002Fback-matter\u002Fbb-analyzers\u002Fcritic_v","7.sei-cert-perl-coding-standard\u002F5.back-matter\u002F3.bb-analyzers\u002F3.critic_v",{"title":1045,"path":1046,"stem":1047},"Lint","\u002Fsei-cert-perl-coding-standard\u002Fback-matter\u002Fbb-analyzers\u002Flint","7.sei-cert-perl-coding-standard\u002F5.back-matter\u002F3.bb-analyzers\u002F4.lint",{"title":1049,"path":1050,"stem":1051},"Lint_V","\u002Fsei-cert-perl-coding-standard\u002Fback-matter\u002Fbb-analyzers\u002Flint_v","7.sei-cert-perl-coding-standard\u002F5.back-matter\u002F3.bb-analyzers\u002F5.lint_v",{"title":1053,"path":1054,"stem":1055},"Security Reviewer - Static Reviewer","\u002Fsei-cert-perl-coding-standard\u002Fback-matter\u002Fbb-analyzers\u002Fsecurity-reviewer-static-reviewer","7.sei-cert-perl-coding-standard\u002F5.back-matter\u002F3.bb-analyzers\u002F6.security-reviewer-static-reviewer",{"title":1057,"path":1058,"stem":1059},"Security Reviewer - Static Reviewer_V","\u002Fsei-cert-perl-coding-standard\u002Fback-matter\u002Fbb-analyzers\u002Fsecurity-reviewer-static-reviewer_v","7.sei-cert-perl-coding-standard\u002F5.back-matter\u002F3.bb-analyzers\u002F7.security-reviewer-static-reviewer_v",{"title":1061,"path":1062,"stem":1063},"CC. Risk Assessments","\u002Fsei-cert-perl-coding-standard\u002Fback-matter\u002Fcc-risk-assessments","7.sei-cert-perl-coding-standard\u002F5.back-matter\u002F4.cc-risk-assessments",1775657794539]