[{"data":1,"prerenderedAt":1083},["ShallowReactive",2],{"global-navigation":3,"page-\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fdeclarations-and-initialization-dcl\u002Fdcl02-pl":28,"surround-\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fdeclarations-and-initialization-dcl\u002Fdcl02-pl":699,"sidebar-sei-cert-perl-coding-standard":706},[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":689,"extension":690,"meta":691,"navigation":7,"path":695,"seo":696,"stem":697,"__hash__":698},"content\u002F7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F2.declarations-and-initialization-dcl\u002F4.dcl02-pl.md","DCL02-PL. Any modified punctuation variable should be declared local",{"type":32,"value":33,"toc":681},"minimark",[34,38,47,52,63,231,242,246,252,362,366,376,493,497,500,560,564,592,596,653,656,677],[35,36,30],"h1",{"id":37},"dcl02-pl-any-modified-punctuation-variable-should-be-declared-local",[39,40,41,42,46],"p",{},"Perl has a large number of punctuation variables. They control the behavior of various operations in the Perl interpreter. Although they are initially set to reasonable default values, any Perl code has the ability to change their values for its own internal purposes. If a program modifies one of these variables, it is obligated to reset the variable to its default value, lest it alter the behavior of subsequent unrelated code. The easiest way for a program to \"clean up after itself\" is to declare such variables ",[43,44,45],"code",{},"local"," when modifying them.",[48,49,51],"h2",{"id":50},"noncompliant-code-example","Noncompliant Code Example",[39,53,54,55,58,59,62],{},"This noncompliant code example shows a subroutine that counts the number of virtual users on this platform. This value is deduced by the number of users in the ",[43,56,57],{},"\u002Fetc\u002Fpasswd"," file that use the program ",[43,60,61],{},"\u002Fusr\u002Fbin\u002Ffalse"," as their shell.",[64,65,67],"code-block",{"quality":66},"bad",[68,69,74],"pre",{"className":70,"code":71,"language":72,"meta":73,"style":73},"language-perl shiki shiki-themes github-light github-dark monokai","sub count_virtual_users {\n  my $result = 0;\n  $\u002F = \":\";\n  open( PASSWD, \"\u003C\", \"\u002Fetc\u002Fpasswd\");\n  while (\u003CPASSWD>) {\n    @items = split \"\\n\";\n    foreach (@items) {\n      if ($_ eq \"\u002Fusr\u002Fbin\u002Ffalse\") {\n        $result++;\n      }\n    }\n  }\n  $result;\n}\n","perl","",[43,75,76,93,103,116,138,147,168,177,195,201,207,213,219,225],{"__ignoreMap":73},[77,78,81,85,89],"span",{"class":79,"line":80},"line",1,[77,82,84],{"class":83},"sq6CD","sub",[77,86,88],{"class":87},"srTi1"," count_virtual_users",[77,90,92],{"class":91},"sMOD_"," {\n",[77,94,96,100],{"class":79,"line":95},2,[77,97,99],{"class":98},"sC2Qs","  my",[77,101,102],{"class":91}," $result = 0;\n",[77,104,106,109,113],{"class":79,"line":105},3,[77,107,108],{"class":91},"  $\u002F = ",[77,110,112],{"class":111},"sstjo","\":\"",[77,114,115],{"class":91},";\n",[77,117,119,123,126,129,132,135],{"class":79,"line":118},4,[77,120,122],{"class":121},"sTrkL","  open",[77,124,125],{"class":91},"( PASSWD, ",[77,127,128],{"class":111},"\"\u003C\"",[77,130,131],{"class":91},", ",[77,133,134],{"class":111},"\"\u002Fetc\u002Fpasswd\"",[77,136,137],{"class":91},");\n",[77,139,141,144],{"class":79,"line":140},5,[77,142,143],{"class":98},"  while",[77,145,146],{"class":91}," (\u003CPASSWD>) {\n",[77,148,150,153,156,159,163,166],{"class":79,"line":149},6,[77,151,152],{"class":91},"    @items = ",[77,154,155],{"class":121},"split",[77,157,158],{"class":111}," \"",[77,160,162],{"class":161},"s7F3e","\\n",[77,164,165],{"class":111},"\"",[77,167,115],{"class":91},[77,169,171,174],{"class":79,"line":170},7,[77,172,173],{"class":98},"    foreach",[77,175,176],{"class":91}," (@items) {\n",[77,178,180,183,186,189,192],{"class":79,"line":179},8,[77,181,182],{"class":98},"      if",[77,184,185],{"class":91}," ($_ ",[77,187,188],{"class":121},"eq",[77,190,191],{"class":111}," \"\u002Fusr\u002Fbin\u002Ffalse\"",[77,193,194],{"class":91},") {\n",[77,196,198],{"class":79,"line":197},9,[77,199,200],{"class":91},"        $result++;\n",[77,202,204],{"class":79,"line":203},10,[77,205,206],{"class":91},"      }\n",[77,208,210],{"class":79,"line":209},11,[77,211,212],{"class":91},"    }\n",[77,214,216],{"class":79,"line":215},12,[77,217,218],{"class":91},"  }\n",[77,220,222],{"class":79,"line":221},13,[77,223,224],{"class":91},"  $result;\n",[77,226,228],{"class":79,"line":227},14,[77,229,230],{"class":91},"}\n",[39,232,233,234,237,238,241],{},"This program produces the correct result, but it leaves the ",[43,235,236],{},"$\u002F"," variable set to an unusual value ( ",[43,239,240],{},":"," ). Subsequent reads of any file will use this character as the end-of-line delimiter rather than the typical newline, which is the default value.",[48,243,245],{"id":244},"compliant-solution","Compliant Solution",[39,247,248,249,251],{},"This compliant solution again produces the same result but localizes the punctuation variable. Consequently, when the subroutine returns, the ",[43,250,236],{}," variable is restored to its original value, and subsequent file reads behave as expected.",[64,253,255],{"quality":254},"good",[68,256,258],{"className":70,"code":257,"language":72,"meta":73,"style":73},"sub count_virtual_users {\n  my $result = 0;\n  local $\u002F = \":\";\n  open( PASSWD, \"\u003C\", \"\u002Fetc\u002Fpasswd\");\n  while (\u003CPASSWD>) {\n    @items = split \"\\n\";\n    foreach (@items) {\n      if ($_ eq \"\u002Fusr\u002Fbin\u002Ffalse\") {\n        $result++;\n      }\n    }\n  }\n  $result;\n}\n",[43,259,260,268,274,286,300,306,320,326,338,342,346,350,354,358],{"__ignoreMap":73},[77,261,262,264,266],{"class":79,"line":80},[77,263,84],{"class":83},[77,265,88],{"class":87},[77,267,92],{"class":91},[77,269,270,272],{"class":79,"line":95},[77,271,99],{"class":98},[77,273,102],{"class":91},[77,275,276,279,282,284],{"class":79,"line":105},[77,277,278],{"class":98},"  local",[77,280,281],{"class":91}," $\u002F = ",[77,283,112],{"class":111},[77,285,115],{"class":91},[77,287,288,290,292,294,296,298],{"class":79,"line":118},[77,289,122],{"class":121},[77,291,125],{"class":91},[77,293,128],{"class":111},[77,295,131],{"class":91},[77,297,134],{"class":111},[77,299,137],{"class":91},[77,301,302,304],{"class":79,"line":140},[77,303,143],{"class":98},[77,305,146],{"class":91},[77,307,308,310,312,314,316,318],{"class":79,"line":149},[77,309,152],{"class":91},[77,311,155],{"class":121},[77,313,158],{"class":111},[77,315,162],{"class":161},[77,317,165],{"class":111},[77,319,115],{"class":91},[77,321,322,324],{"class":79,"line":170},[77,323,173],{"class":98},[77,325,176],{"class":91},[77,327,328,330,332,334,336],{"class":79,"line":179},[77,329,182],{"class":98},[77,331,185],{"class":91},[77,333,188],{"class":121},[77,335,191],{"class":111},[77,337,194],{"class":91},[77,339,340],{"class":79,"line":197},[77,341,200],{"class":91},[77,343,344],{"class":79,"line":203},[77,345,206],{"class":91},[77,347,348],{"class":79,"line":209},[77,349,212],{"class":91},[77,351,352],{"class":79,"line":215},[77,353,218],{"class":91},[77,355,356],{"class":79,"line":221},[77,357,224],{"class":91},[77,359,360],{"class":79,"line":227},[77,361,230],{"class":91},[48,363,365],{"id":364},"exceptions","Exceptions",[39,367,368,372,373,375],{},[369,370,371],"strong",{},"DCL02-PL-EX0"," : The following global variables may be modified without being declared ",[43,374,45],{}," :",[377,378,379,392],"table",{},[380,381,382],"thead",{},[383,384,385,388,390],"tr",{},[386,387],"th",{},[386,389],{},[386,391],{},[393,394,395,413,429,446,462,478],"tbody",{},[383,396,397,403,408],{},[398,399,400],"td",{},[43,401,402],{},"$_",[398,404,405],{},[43,406,407],{},"$ARG",[398,409,410],{},[43,411,412],{},"      ",[383,414,415,420,425],{},[398,416,417],{},[43,418,419],{},"@_",[398,421,422],{},[43,423,424],{},"@ARG",[398,426,427],{},[43,428,412],{},[383,430,431,436,441],{},[398,432,433],{},[43,434,435],{},"$!",[398,437,438],{},[43,439,440],{},"$ERRNO",[398,442,443],{},[43,444,445],{},"$OS_ERROR",[383,447,448,452,457],{},[398,449,450],{},[43,451,412],{},[398,453,454],{},[43,455,456],{},"%ENV",[398,458,459],{},[43,460,461],{},"$ENV{expr}",[383,463,464,468,473],{},[398,465,466],{},[43,467,412],{},[398,469,470],{},[43,471,472],{},"%SIG",[398,474,475],{},[43,476,477],{},"$SIG{expr}",[383,479,480,484,489],{},[398,481,482],{},[43,483,412],{},[398,485,486],{},[43,487,488],{},"%INC",[398,490,491],{},[43,492,412],{},[48,494,496],{"id":495},"risk-assessment","Risk Assessment",[39,498,499],{},"Modifying punctuation variables without declaring them local can corrupt data and create unexpected program behavior.",[377,501,502,518],{},[380,503,504],{},[383,505,506,508,510,512,514,516],{},[386,507],{},[386,509],{},[386,511],{},[386,513],{},[386,515],{},[386,517],{},[393,519,520,540],{},[383,521,522,525,528,531,534,537],{},[398,523,524],{},"Recommendation",[398,526,527],{},"Severity",[398,529,530],{},"Likelihood",[398,532,533],{},"Remediation Cost",[398,535,536],{},"Priority",[398,538,539],{},"Level",[383,541,542,545,548,551,554,557],{},[398,543,544],{},"DCL02-PL",[398,546,547],{},"Low",[398,549,550],{},"Probable",[398,552,553],{},"Medium",[398,555,556],{},"P4",[398,558,559],{},"L3",[48,561,563],{"id":562},"automated-detection","Automated Detection",[377,565,566,574],{},[380,567,568],{},[383,569,570,572],{},[386,571],{},[386,573],{},[393,575,576,584],{},[383,577,578,581],{},[398,579,580],{},"Tool",[398,582,583],{},"Diagnostic",[383,585,586,589],{},[398,587,588],{},"Perl::Critic",[398,590,591],{},"Variables::RequireLocalizedPunctuationVars",[48,593,595],{"id":594},"bibliography","Bibliography",[377,597,598,606],{},[380,599,600],{},[383,601,602,604],{},[386,603],{},[386,605],{},[393,607,608,632],{},[383,609,610,619],{},[398,611,612,613,618],{},"[ ",[614,615,617],"a",{"href":616},"\u002Fsei-cert-perl-coding-standard\u002Fback-matter\u002Faa-bibliography#AA.Bibliography-CPAN","CPAN"," ]",[398,620,621,627,628],{},[614,622,626],{"href":623,"rel":624},"http:\u002F\u002Fsearch.cpan.org\u002F%7Eelliotjs\u002FPerl-Critic-1.116\u002F",[625],"nofollow","Elliot Shank, Perl-Critic-1.116"," ",[614,629,591],{"href":630,"rel":631},"http:\u002F\u002Fsearch.cpan.org\u002Fdist\u002FPerl-Critic\u002Flib\u002FPerl\u002FCritic\u002FPolicy\u002FVariables\u002FRequireLocalizedPunctuationVars.pm",[625],[383,633,634,640],{},[398,635,612,636,618],{},[614,637,639],{"href":638},"\u002Fsei-cert-perl-coding-standard\u002Fback-matter\u002Faa-bibliography#AA.Bibliography-Manpages","Wall 2011",[398,641,642,647,648],{},[614,643,646],{"href":644,"rel":645},"http:\u002F\u002Fperldoc.perl.org\u002Fperlfunc.html",[625],"perlfunc"," , ",[614,649,652],{"href":650,"rel":651},"http:\u002F\u002Fperldoc.perl.org\u002Fperlvar.html",[625],"perlvar",[654,655],"hr",{},[39,657,658,627,665,627,671],{},[614,659,661],{"href":660},"\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fdeclarations-and-initialization-dcl\u002Fdcl01-pl",[662,663],"img",{"src":664},"\u002Fattachments\u002F88890562\u002F88892207.png",[614,666,668],{"href":667},"\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fdeclarations-and-initialization-dcl\u002F",[662,669],{"src":670},"\u002Fattachments\u002F88890562\u002F88892209.png",[614,672,674],{"href":673},"\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fdeclarations-and-initialization-dcl\u002Fdcl03-pl",[662,675],{"src":676},"\u002Fattachments\u002F88890562\u002F88892208.png",[678,679,680],"style",{},"html pre.shiki code .sq6CD, html code.shiki .sq6CD{--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .srTi1, html code.shiki .srTi1{--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}html pre.shiki code .sMOD_, html code.shiki .sMOD_{--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .sC2Qs, html code.shiki .sC2Qs{--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}html pre.shiki code .sstjo, html code.shiki .sstjo{--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .sTrkL, html code.shiki .sTrkL{--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#66D9EF}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":73,"searchDepth":95,"depth":95,"links":682},[683,684,685,686,687,688],{"id":50,"depth":95,"text":51},{"id":244,"depth":95,"text":245},{"id":364,"depth":95,"text":365},{"id":495,"depth":95,"text":496},{"id":562,"depth":95,"text":563},{"id":594,"depth":95,"text":595},"Perl has a large number of punctuation variables. They control the behavior of various operations in the Perl interpreter. Although they are initially set to reasonable default values, any Perl code has the ability to change their values for its own internal purposes. If a program modifies one of these variables, it is obligated to reset the variable to its default value, lest it alter the behavior of subsequent unrelated code. The easiest way for a program to \"clean up after itself\" is to declare such variables local when modifying them.","md",{"tags":692},[693,694],"dcl","recommendation","\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fdeclarations-and-initialization-dcl\u002Fdcl02-pl",{"title":30,"description":689},"7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F2.declarations-and-initialization-dcl\u002F4.dcl02-pl","4CBAGEkJN8zaSo6TqY-AT0dLrLJa-QBV-zJToY0YYBg",[700,703],{"title":701,"path":660,"stem":702,"children":-1},"DCL01-PL. Do not reuse variable names in subscopes","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F2.declarations-and-initialization-dcl\u002F3.dcl01-pl",{"title":704,"path":673,"stem":705,"children":-1},"DCL03-PL. Do not read a foreach iterator variable after the loop has completed","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F2.declarations-and-initialization-dcl\u002F5.dcl03-pl",[707],{"title":708,"path":709,"stem":710,"children":711},"SEI CERT Perl Coding Standard","\u002Fsei-cert-perl-coding-standard","7.sei-cert-perl-coding-standard\u002F1.index",[712,713,768,900,1039],{"title":708,"path":709,"stem":710},{"title":714,"path":715,"stem":716,"children":717},"Front Matter","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F1.index",[718,719,723],{"title":714,"path":715,"stem":716},{"title":720,"path":721,"stem":722},"Deprecations","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fdeprecations","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F2.deprecations",{"title":724,"path":725,"stem":726,"children":727},"Introduction","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fintroduction","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F3.introduction\u002F01.index",[728,729,733,737,741,745,749,753,756,760,764],{"title":724,"path":725,"stem":726},{"title":730,"path":731,"stem":732},"Scope","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fscope","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F3.introduction\u002F01.scope",{"title":734,"path":735,"stem":736},"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":738,"path":739,"stem":740},"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":742,"path":743,"stem":744},"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":746,"path":747,"stem":748},"Usage","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fusage","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F3.introduction\u002F05.usage",{"title":750,"path":751,"stem":752},"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":496,"path":754,"stem":755},"\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":757,"path":758,"stem":759},"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":761,"path":762,"stem":763},"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":765,"path":766,"stem":767},"Acknowledgements","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fintroduction\u002Facknowledgements","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F3.introduction\u002F11.acknowledgements",{"title":769,"path":770,"stem":771,"children":772},"Rules","\u002Fsei-cert-perl-coding-standard\u002Frules","7.sei-cert-perl-coding-standard\u002F3.rules\u002F1.index",[773,774,792,818,828,858,862,876,886],{"title":769,"path":770,"stem":771},{"title":775,"path":776,"stem":777,"children":778},"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",[779,780,784,788],{"title":775,"path":776,"stem":777},{"title":781,"path":782,"stem":783},"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":785,"path":786,"stem":787},"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":789,"path":790,"stem":791},"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":793,"path":794,"stem":795,"children":796},"Expressions (EXP)","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fexpressions-exp","7.sei-cert-perl-coding-standard\u002F3.rules\u002F3.expressions-exp\u002F1.index",[797,798,802,806,810,814],{"title":793,"path":794,"stem":795},{"title":799,"path":800,"stem":801},"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":803,"path":804,"stem":805},"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":807,"path":808,"stem":809},"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":811,"path":812,"stem":813},"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":815,"path":816,"stem":817},"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":819,"path":820,"stem":821,"children":822},"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",[823,824],{"title":819,"path":820,"stem":821},{"title":825,"path":826,"stem":827},"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":829,"path":830,"stem":831,"children":832},"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",[833,834,838,842,846,850,854],{"title":829,"path":830,"stem":831},{"title":835,"path":836,"stem":837},"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":839,"path":840,"stem":841},"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":843,"path":844,"stem":845},"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":847,"path":848,"stem":849},"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":851,"path":852,"stem":853},"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":855,"path":856,"stem":857},"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":859,"path":860,"stem":861},"Integers (INT)","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fintegers-int","7.sei-cert-perl-coding-standard\u002F3.rules\u002F6.integers-int",{"title":863,"path":864,"stem":865,"children":866},"Miscellaneous (MSC)","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fmiscellaneous-msc","7.sei-cert-perl-coding-standard\u002F3.rules\u002F7.miscellaneous-msc\u002F1.index",[867,868,872],{"title":863,"path":864,"stem":865},{"title":869,"path":870,"stem":871},"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":873,"path":874,"stem":875},"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":877,"path":878,"stem":879,"children":880},"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",[881,882],{"title":877,"path":878,"stem":879},{"title":883,"path":884,"stem":885},"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":887,"path":888,"stem":889,"children":890},"Strings (STR)","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fstrings-str","7.sei-cert-perl-coding-standard\u002F3.rules\u002F9.strings-str\u002F1.index",[891,892,896],{"title":887,"path":888,"stem":889},{"title":893,"path":894,"stem":895},"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":897,"path":898,"stem":899},"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":901,"path":902,"stem":903,"children":904},"Recommendations","\u002Fsei-cert-perl-coding-standard\u002Frecommendations","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F1.index",[905,906,926,959,972,985,998,1023,1036],{"title":901,"path":902,"stem":903},{"title":775,"path":907,"stem":908,"children":909},"\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",[910,911,915,916,917,918,922],{"title":775,"path":907,"stem":908},{"title":912,"path":913,"stem":914},"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":701,"path":660,"stem":702},{"title":30,"path":695,"stem":697},{"title":704,"path":673,"stem":705},{"title":919,"path":920,"stem":921},"DCL04-PL. Always initialize local variables","\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fdeclarations-and-initialization-dcl\u002Fdcl04-pl","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F2.declarations-and-initialization-dcl\u002F6.dcl04-pl",{"title":923,"path":924,"stem":925},"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":793,"path":927,"stem":928,"children":929},"\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fexpressions-exp","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F3.expressions-exp\u002F1.index",[930,931,935,939,943,947,951,955],{"title":793,"path":927,"stem":928},{"title":932,"path":933,"stem":934},"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":936,"path":937,"stem":938},"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":940,"path":941,"stem":942},"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":944,"path":945,"stem":946},"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":948,"path":949,"stem":950},"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":952,"path":953,"stem":954},"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":956,"path":957,"stem":958},"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":819,"path":960,"stem":961,"children":962},"\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",[963,964,968],{"title":819,"path":960,"stem":961},{"title":965,"path":966,"stem":967},"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":969,"path":970,"stem":971},"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":829,"path":973,"stem":974,"children":975},"\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",[976,977,981],{"title":829,"path":973,"stem":974},{"title":978,"path":979,"stem":980},"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":982,"path":983,"stem":984},"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":859,"path":986,"stem":987,"children":988},"\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fintegers-int","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F6.integers-int\u002F1.index",[989,990,994],{"title":859,"path":986,"stem":987},{"title":991,"path":992,"stem":993},"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":995,"path":996,"stem":997},"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":863,"path":999,"stem":1000,"children":1001},"\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fmiscellaneous-msc","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F7.miscellaneous-msc\u002F1.index",[1002,1003,1007,1011,1015,1019],{"title":863,"path":999,"stem":1000},{"title":1004,"path":1005,"stem":1006},"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":1008,"path":1009,"stem":1010},"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":1012,"path":1013,"stem":1014},"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":1016,"path":1017,"stem":1018},"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":1020,"path":1021,"stem":1022},"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":877,"path":1024,"stem":1025,"children":1026},"\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",[1027,1028,1032],{"title":877,"path":1024,"stem":1025},{"title":1029,"path":1030,"stem":1031},"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":1033,"path":1034,"stem":1035},"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":887,"path":1037,"stem":1038},"\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fstrings-str","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F9.strings-str",{"title":1040,"path":1041,"stem":1042,"children":1043},"Back Matter","\u002Fsei-cert-perl-coding-standard\u002Fback-matter","7.sei-cert-perl-coding-standard\u002F5.back-matter\u002F1.index",[1044,1045,1049,1079],{"title":1040,"path":1041,"stem":1042},{"title":1046,"path":1047,"stem":1048},"AA. Bibliography","\u002Fsei-cert-perl-coding-standard\u002Fback-matter\u002Faa-bibliography","7.sei-cert-perl-coding-standard\u002F5.back-matter\u002F2.aa-bibliography",{"title":1050,"path":1051,"stem":1052,"children":1053},"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",[1054,1055,1059,1063,1067,1071,1075],{"title":1050,"path":1051,"stem":1052},{"title":1056,"path":1057,"stem":1058},"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":1060,"path":1061,"stem":1062},"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":1064,"path":1065,"stem":1066},"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":1068,"path":1069,"stem":1070},"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":1072,"path":1073,"stem":1074},"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":1076,"path":1077,"stem":1078},"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":1080,"path":1081,"stem":1082},"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",1775657794538]