[{"data":1,"prerenderedAt":1003},["ShallowReactive",2],{"global-navigation":3,"page-\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fexpressions-exp\u002Fexp00-pl":28,"surround-\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fexpressions-exp\u002Fexp00-pl":620,"sidebar-sei-cert-perl-coding-standard":628},[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":41,"extension":611,"meta":612,"navigation":7,"path":616,"seo":617,"stem":618,"__hash__":619},"content\u002F7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F3.expressions-exp\u002F2.exp00-pl.md","EXP00-PL. Do not return undef",{"type":32,"value":33,"toc":603},"minimark",[34,38,42,60,72,77,87,274,297,319,323,333,391,395,405,409,416,481,485,525,529,576,579,599],[35,36,30],"h1",{"id":37},"exp00-pl-do-not-return-undef",[39,40,41],"p",{},"Perl expressions can be interpreted in either scalar or list context, depending on the syntactic placement of the expression. Many functions are designed to return only a scalar or only a list. Many built-in functions can be called in both contexts, and they may return differing values for each. Furthermore, any function may specify exactly what to return in each context.",[39,43,44,45,49,50,53,54,56,57,59],{},"Returning the value ",[46,47,48],"code",{},"undef"," is a common convention for a function to indicate it has no return value. It is often used to indicate that an error occurred or that a function could not successfully complete an operation. When used as the conditional in a conditional expression (such as in an ",[46,51,52],{},"if"," statement), ",[46,55,48],{}," evaluates to false. Therefore, a function that is evaluated only in scalar context may safely return ",[46,58,48],{}," to indicate failure.",[39,61,62,63,65,66,68,69,71],{},"In list context, things are slightly more complicated. An empty list, when evaluated in a boolean condition, evaluates to false. But the value ",[46,64,48],{}," , when evaluated in list context, evaluates to true because it is converted to a list with the singleton value ",[46,67,48],{}," . Therefore, a function should not return ",[46,70,48],{}," if it might ever be invoked in list context.",[73,74,76],"h2",{"id":75},"noncompliant-code-example","Noncompliant Code Example",[39,78,79,80,83,84,86],{},"This noncompliant code example opens the ",[46,81,82],{},"\u002Fetc\u002Fshadow"," file to process the users and encrypted passwords on a POSIX system. Because the ",[46,85,82],{}," file is conventionally readable only by the root user, this program must gracefully abort if it is not allowed to read this file.",[88,89,91],"code-block",{"quality":90},"bad",[92,93,98],"pre",{"className":94,"code":95,"language":96,"meta":97,"style":97},"language-perl shiki shiki-themes github-light github-dark monokai","sub read_users {\n  open( my $filehandle, \"\u003C\", \"\u002Fetc\u002Fshadow\")\n    or return undef;\n  my @users = \u003C$filehandle>;\n  return @users;\n}\n\n# ...\n\nif (my @users = read_users($filename)) {\n  print \"Your system has $#users users\\n\";\n  # process users\n} else {\n  croak \"Cannot read shadow file\";\n}\n","perl","",[46,99,100,117,147,162,171,180,186,192,199,204,217,241,247,258,269],{"__ignoreMap":97},[101,102,105,109,113],"span",{"class":103,"line":104},"line",1,[101,106,108],{"class":107},"sq6CD","sub",[101,110,112],{"class":111},"srTi1"," read_users",[101,114,116],{"class":115},"sMOD_"," {\n",[101,118,120,124,127,131,134,138,141,144],{"class":103,"line":119},2,[101,121,123],{"class":122},"sTrkL","  open",[101,125,126],{"class":115},"( ",[101,128,130],{"class":129},"sC2Qs","my",[101,132,133],{"class":115}," $filehandle, ",[101,135,137],{"class":136},"sstjo","\"\u003C\"",[101,139,140],{"class":115},", ",[101,142,143],{"class":136},"\"\u002Fetc\u002Fshadow\"",[101,145,146],{"class":115},")\n",[101,148,150,153,156,159],{"class":103,"line":149},3,[101,151,152],{"class":129},"    or",[101,154,155],{"class":129}," return",[101,157,158],{"class":122}," undef",[101,160,161],{"class":115},";\n",[101,163,165,168],{"class":103,"line":164},4,[101,166,167],{"class":129},"  my",[101,169,170],{"class":115}," @users = \u003C$filehandle>;\n",[101,172,174,177],{"class":103,"line":173},5,[101,175,176],{"class":129},"  return",[101,178,179],{"class":115}," @users;\n",[101,181,183],{"class":103,"line":182},6,[101,184,185],{"class":115},"}\n",[101,187,189],{"class":103,"line":188},7,[101,190,191],{"emptyLinePlaceholder":7},"\n",[101,193,195],{"class":103,"line":194},8,[101,196,198],{"class":197},"s8-w5","# ...\n",[101,200,202],{"class":103,"line":201},9,[101,203,191],{"emptyLinePlaceholder":7},[101,205,207,209,212,214],{"class":103,"line":206},10,[101,208,52],{"class":129},[101,210,211],{"class":115}," (",[101,213,130],{"class":129},[101,215,216],{"class":115}," @users = read_users($filename)) {\n",[101,218,220,223,226,229,232,236,239],{"class":103,"line":219},11,[101,221,222],{"class":122},"  print",[101,224,225],{"class":136}," \"Your system has ",[101,227,228],{"class":115},"$#users",[101,230,231],{"class":136}," users",[101,233,235],{"class":234},"s7F3e","\\n",[101,237,238],{"class":136},"\"",[101,240,161],{"class":115},[101,242,244],{"class":103,"line":243},12,[101,245,246],{"class":197},"  # process users\n",[101,248,250,253,256],{"class":103,"line":249},13,[101,251,252],{"class":115},"} ",[101,254,255],{"class":129},"else",[101,257,116],{"class":115},[101,259,261,264,267],{"class":103,"line":260},14,[101,262,263],{"class":115},"  croak ",[101,265,266],{"class":136},"\"Cannot read shadow file\"",[101,268,161],{"class":115},[101,270,272],{"class":103,"line":271},15,[101,273,185],{"class":115},[39,275,276,277,280,281,283,284,286,287,289,290,293,294,296],{},"The ",[46,278,279],{},"read_users()"," subroutine returns ",[46,282,48],{}," if it cannot open ",[46,285,82],{}," , but it returns a list of user data entries if it succeeds. Because its output is used in list context, a return value of ",[46,288,48],{}," is converted to a list of a single element: ",[46,291,292],{},"(undef)"," . Consequently, the ",[46,295,52],{}," condition returns true, and the system incorrectly prints out the following:",[92,298,302],{"className":299,"code":300,"language":301,"meta":97,"style":97},"language-java shiki shiki-themes github-light github-dark monokai","Your system has 0 users\n","java",[46,303,304],{"__ignoreMap":97},[101,305,306,310,313,316],{"class":103,"line":104},[101,307,309],{"class":308},"sk8M1","Your",[101,311,312],{"class":115}," system has ",[101,314,315],{"class":234},"0",[101,317,318],{"class":115}," users\n",[73,320,322],{"id":321},"compliant-solution","Compliant Solution",[39,324,325,326,329,330,332],{},"This compliant solution uses a blank ",[46,327,328],{},"return"," rather than returning ",[46,331,48],{}," . Because a blank return is always interpreted as false in list or scalar context, the program will properly complain if it cannot read the shadow file.",[88,334,336],{"quality":335},"good",[92,337,339],{"className":94,"code":338,"language":96,"meta":97,"style":97},"sub read_users {\n  open( my $filehandle, \"\u003C\", \"\u002Fetc\u002Fshadow\")\n    or return;\n  my @users = \u003C$filehandle>;\n  return @users;\n}\n",[46,340,341,349,367,375,381,387],{"__ignoreMap":97},[101,342,343,345,347],{"class":103,"line":104},[101,344,108],{"class":107},[101,346,112],{"class":111},[101,348,116],{"class":115},[101,350,351,353,355,357,359,361,363,365],{"class":103,"line":119},[101,352,123],{"class":122},[101,354,126],{"class":115},[101,356,130],{"class":129},[101,358,133],{"class":115},[101,360,137],{"class":136},[101,362,140],{"class":115},[101,364,143],{"class":136},[101,366,146],{"class":115},[101,368,369,371,373],{"class":103,"line":149},[101,370,152],{"class":129},[101,372,155],{"class":129},[101,374,161],{"class":115},[101,376,377,379],{"class":103,"line":164},[101,378,167],{"class":129},[101,380,170],{"class":115},[101,382,383,385],{"class":103,"line":173},[101,384,176],{"class":129},[101,386,179],{"class":115},[101,388,389],{"class":103,"line":182},[101,390,185],{"class":115},[73,392,394],{"id":393},"exceptions","Exceptions",[39,396,397,401,402,404],{},[398,399,400],"strong",{},"EXP00-PL-EX1"," : This recommendation applies specifically to functions called in a list context. If you can guarantee that some function will never be called in a list context, then that function may return ",[46,403,48],{}," .",[73,406,408],{"id":407},"risk-assessment","Risk Assessment",[39,410,411,412,415],{},"Improper interpretation of ",[46,413,414],{},"  return undef "," can lead to incorrect program flow.",[417,418,419,438],"table",{},[420,421,422],"thead",{},[423,424,425,428,430,432,434,436],"tr",{},[426,427],"th",{},[426,429],{},[426,431],{},[426,433],{},[426,435],{},[426,437],{},[439,440,441,462],"tbody",{},[423,442,443,447,450,453,456,459],{},[444,445,446],"td",{},"Recommendation",[444,448,449],{},"Severity",[444,451,452],{},"Likelihood",[444,454,455],{},"Remediation Cost",[444,457,458],{},"Priority",[444,460,461],{},"Level",[423,463,464,467,470,473,475,478],{},[444,465,466],{},"EXP00-PL",[444,468,469],{},"Low",[444,471,472],{},"Unlikely",[444,474,469],{},[444,476,477],{},"P3",[444,479,480],{},"L3",[73,482,484],{"id":483},"automated-detection","Automated Detection",[417,486,487,495],{},[420,488,489],{},[423,490,491,493],{},[426,492],{},[426,494],{},[439,496,497,505,513],{},[423,498,499,502],{},[444,500,501],{},"Tool",[444,503,504],{},"Diagnostic",[423,506,507,510],{},[444,508,509],{},"Perl::Critic",[444,511,512],{},"Subroutines::ProhibitExplicitReturnUndef",[423,514,515,522],{},[444,516,517],{},[518,519,521],"a",{"href":520},"\u002Fsei-cert-perl-coding-standard\u002Fback-matter\u002Fbb-analyzers\u002Fsecurity-reviewer-static-reviewer","Security Reviewer - Static Reviewer",[444,523,524],{},"PERL_D102",[73,526,528],{"id":527},"bibliography","Bibliography",[417,530,531,539],{},[420,532,533],{},[423,534,535,537],{},[426,536],{},[426,538],{},[439,540,541,554],{},[423,542,543,551],{},[444,544,545,546,550],{},"[ ",[518,547,549],{"href":548},"\u002Fsei-cert-perl-coding-standard\u002Fback-matter\u002Faa-bibliography#AA.Bibliography-Conway2005","Conway 2005"," ]",[444,552,553],{},"\"Returning Failure,\" p. 199",[423,555,556,562],{},[444,557,545,558,550],{},[518,559,561],{"href":560},"\u002Fsei-cert-perl-coding-standard\u002Fback-matter\u002Faa-bibliography#AA.Bibliography-CPAN","CPAN",[444,563,564,570,571],{},[518,565,569],{"href":566,"rel":567},"http:\u002F\u002Fsearch.cpan.org\u002F%7Eelliotjs\u002FPerl-Critic-1.116\u002F",[568],"nofollow","Elliot Shank, Perl-Critic-1.116"," ",[518,572,575],{"href":573,"rel":574},"http:\u002F\u002Fsearch.cpan.org\u002Fdist\u002FPerl-Critic\u002Flib\u002FPerl\u002FCritic\u002FPolicy\u002FSubroutines\u002FProhibitExplicitReturnUndef.pm",[568],"ProhibitOneArgSelect",[577,578],"hr",{},[39,580,581,570,588,570,593],{},[518,582,584],{"href":583},"\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fexpressions-exp\u002F",[585,586],"img",{"src":587},"\u002Fattachments\u002F88890562\u002F88892207.png",[518,589,590],{"href":583},[585,591],{"src":592},"\u002Fattachments\u002F88890562\u002F88892209.png",[518,594,596],{"href":595},"\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fexpressions-exp\u002Fexp01-pl",[585,597],{"src":598},"\u002Fattachments\u002F88890562\u002F88892208.png",[600,601,602],"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 .sTrkL, html code.shiki .sTrkL{--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#66D9EF}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 .s8-w5, html code.shiki .s8-w5{--shiki-default:#6A737D;--shiki-dark:#6A737D;--shiki-sepia:#88846F}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);}html pre.shiki code .sk8M1, html code.shiki .sk8M1{--shiki-default:#24292E;--shiki-default-font-style:inherit;--shiki-dark:#E1E4E8;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}",{"title":97,"searchDepth":119,"depth":119,"links":604},[605,606,607,608,609,610],{"id":75,"depth":119,"text":76},{"id":321,"depth":119,"text":322},{"id":393,"depth":119,"text":394},{"id":407,"depth":119,"text":408},{"id":483,"depth":119,"text":484},{"id":527,"depth":119,"text":528},"md",{"tags":613},[614,615],"recommendation","exp","\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fexpressions-exp\u002Fexp00-pl",{"title":30,"description":41},"7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F3.expressions-exp\u002F2.exp00-pl","0Uw29yzVQI9J2LejJIlDR6uqWF1-4NM_FywOr7UUbpY",[621,625],{"title":622,"path":623,"stem":624,"children":-1},"Expressions (EXP)","\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fexpressions-exp","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F3.expressions-exp\u002F1.index",{"title":626,"path":595,"stem":627,"children":-1},"EXP01-PL. Do not depend on the return value of functions that lack a return statement","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F3.expressions-exp\u002F3.exp01-pl",[629],{"title":630,"path":631,"stem":632,"children":633},"SEI CERT Perl Coding Standard","\u002Fsei-cert-perl-coding-standard","7.sei-cert-perl-coding-standard\u002F1.index",[634,635,690,821,961],{"title":630,"path":631,"stem":632},{"title":636,"path":637,"stem":638,"children":639},"Front Matter","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F1.index",[640,641,645],{"title":636,"path":637,"stem":638},{"title":642,"path":643,"stem":644},"Deprecations","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fdeprecations","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F2.deprecations",{"title":646,"path":647,"stem":648,"children":649},"Introduction","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fintroduction","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F3.introduction\u002F01.index",[650,651,655,659,663,667,671,675,678,682,686],{"title":646,"path":647,"stem":648},{"title":652,"path":653,"stem":654},"Scope","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fscope","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F3.introduction\u002F01.scope",{"title":656,"path":657,"stem":658},"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":660,"path":661,"stem":662},"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":664,"path":665,"stem":666},"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":668,"path":669,"stem":670},"Usage","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fusage","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F3.introduction\u002F05.usage",{"title":672,"path":673,"stem":674},"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":408,"path":676,"stem":677},"\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":679,"path":680,"stem":681},"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":683,"path":684,"stem":685},"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":687,"path":688,"stem":689},"Acknowledgements","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fintroduction\u002Facknowledgements","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F3.introduction\u002F11.acknowledgements",{"title":691,"path":692,"stem":693,"children":694},"Rules","\u002Fsei-cert-perl-coding-standard\u002Frules","7.sei-cert-perl-coding-standard\u002F3.rules\u002F1.index",[695,696,714,739,749,779,783,797,807],{"title":691,"path":692,"stem":693},{"title":697,"path":698,"stem":699,"children":700},"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",[701,702,706,710],{"title":697,"path":698,"stem":699},{"title":703,"path":704,"stem":705},"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":707,"path":708,"stem":709},"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":711,"path":712,"stem":713},"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":622,"path":715,"stem":716,"children":717},"\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fexpressions-exp","7.sei-cert-perl-coding-standard\u002F3.rules\u002F3.expressions-exp\u002F1.index",[718,719,723,727,731,735],{"title":622,"path":715,"stem":716},{"title":720,"path":721,"stem":722},"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":724,"path":725,"stem":726},"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":728,"path":729,"stem":730},"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":732,"path":733,"stem":734},"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":736,"path":737,"stem":738},"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":740,"path":741,"stem":742,"children":743},"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",[744,745],{"title":740,"path":741,"stem":742},{"title":746,"path":747,"stem":748},"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":750,"path":751,"stem":752,"children":753},"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",[754,755,759,763,767,771,775],{"title":750,"path":751,"stem":752},{"title":756,"path":757,"stem":758},"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":760,"path":761,"stem":762},"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":764,"path":765,"stem":766},"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":768,"path":769,"stem":770},"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":772,"path":773,"stem":774},"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":776,"path":777,"stem":778},"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":780,"path":781,"stem":782},"Integers (INT)","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fintegers-int","7.sei-cert-perl-coding-standard\u002F3.rules\u002F6.integers-int",{"title":784,"path":785,"stem":786,"children":787},"Miscellaneous (MSC)","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fmiscellaneous-msc","7.sei-cert-perl-coding-standard\u002F3.rules\u002F7.miscellaneous-msc\u002F1.index",[788,789,793],{"title":784,"path":785,"stem":786},{"title":790,"path":791,"stem":792},"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":794,"path":795,"stem":796},"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":798,"path":799,"stem":800,"children":801},"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",[802,803],{"title":798,"path":799,"stem":800},{"title":804,"path":805,"stem":806},"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":808,"path":809,"stem":810,"children":811},"Strings (STR)","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fstrings-str","7.sei-cert-perl-coding-standard\u002F3.rules\u002F9.strings-str\u002F1.index",[812,813,817],{"title":808,"path":809,"stem":810},{"title":814,"path":815,"stem":816},"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":818,"path":819,"stem":820},"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":822,"path":823,"stem":824,"children":825},"Recommendations","\u002Fsei-cert-perl-coding-standard\u002Frecommendations","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F1.index",[826,827,856,881,894,907,920,945,958],{"title":822,"path":823,"stem":824},{"title":697,"path":828,"stem":829,"children":830},"\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",[831,832,836,840,844,848,852],{"title":697,"path":828,"stem":829},{"title":833,"path":834,"stem":835},"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":837,"path":838,"stem":839},"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":841,"path":842,"stem":843},"DCL02-PL. Any modified punctuation variable should be declared local","\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fdeclarations-and-initialization-dcl\u002Fdcl02-pl","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F2.declarations-and-initialization-dcl\u002F4.dcl02-pl",{"title":845,"path":846,"stem":847},"DCL03-PL. Do not read a foreach iterator variable after the loop has completed","\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fdeclarations-and-initialization-dcl\u002Fdcl03-pl","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F2.declarations-and-initialization-dcl\u002F5.dcl03-pl",{"title":849,"path":850,"stem":851},"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":853,"path":854,"stem":855},"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":622,"path":623,"stem":624,"children":857},[858,859,860,861,865,869,873,877],{"title":622,"path":623,"stem":624},{"title":30,"path":616,"stem":618},{"title":626,"path":595,"stem":627},{"title":862,"path":863,"stem":864},"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":866,"path":867,"stem":868},"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":870,"path":871,"stem":872},"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":874,"path":875,"stem":876},"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":878,"path":879,"stem":880},"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":740,"path":882,"stem":883,"children":884},"\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",[885,886,890],{"title":740,"path":882,"stem":883},{"title":887,"path":888,"stem":889},"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":891,"path":892,"stem":893},"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":750,"path":895,"stem":896,"children":897},"\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",[898,899,903],{"title":750,"path":895,"stem":896},{"title":900,"path":901,"stem":902},"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":904,"path":905,"stem":906},"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":780,"path":908,"stem":909,"children":910},"\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fintegers-int","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F6.integers-int\u002F1.index",[911,912,916],{"title":780,"path":908,"stem":909},{"title":913,"path":914,"stem":915},"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":917,"path":918,"stem":919},"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":784,"path":921,"stem":922,"children":923},"\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fmiscellaneous-msc","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F7.miscellaneous-msc\u002F1.index",[924,925,929,933,937,941],{"title":784,"path":921,"stem":922},{"title":926,"path":927,"stem":928},"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":930,"path":931,"stem":932},"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":934,"path":935,"stem":936},"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":938,"path":939,"stem":940},"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":942,"path":943,"stem":944},"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":798,"path":946,"stem":947,"children":948},"\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",[949,950,954],{"title":798,"path":946,"stem":947},{"title":951,"path":952,"stem":953},"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":955,"path":956,"stem":957},"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":808,"path":959,"stem":960},"\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fstrings-str","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F9.strings-str",{"title":962,"path":963,"stem":964,"children":965},"Back Matter","\u002Fsei-cert-perl-coding-standard\u002Fback-matter","7.sei-cert-perl-coding-standard\u002F5.back-matter\u002F1.index",[966,967,971,999],{"title":962,"path":963,"stem":964},{"title":968,"path":969,"stem":970},"AA. Bibliography","\u002Fsei-cert-perl-coding-standard\u002Fback-matter\u002Faa-bibliography","7.sei-cert-perl-coding-standard\u002F5.back-matter\u002F2.aa-bibliography",{"title":972,"path":973,"stem":974,"children":975},"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",[976,977,981,985,989,993,995],{"title":972,"path":973,"stem":974},{"title":978,"path":979,"stem":980},"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":982,"path":983,"stem":984},"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":986,"path":987,"stem":988},"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":990,"path":991,"stem":992},"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":521,"path":520,"stem":994},"7.sei-cert-perl-coding-standard\u002F5.back-matter\u002F3.bb-analyzers\u002F6.security-reviewer-static-reviewer",{"title":996,"path":997,"stem":998},"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":1000,"path":1001,"stem":1002},"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",1775657795061]