[{"data":1,"prerenderedAt":967},["ShallowReactive",2],{"global-navigation":3,"page-\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fmiscellaneous-msc\u002Fmsc04-pl":28,"surround-\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fmiscellaneous-msc\u002Fmsc04-pl":582,"sidebar-sei-cert-perl-coding-standard":591},[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":572,"extension":573,"meta":574,"navigation":7,"path":578,"seo":579,"stem":580,"__hash__":581},"content\u002F7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F7.miscellaneous-msc\u002F6.msc04-pl.md","MSC04-PL. Do not use comma to separate statements",{"type":32,"value":33,"toc":563},"minimark",[34,38,47,99,113,116,121,124,256,272,275,298,308,312,318,343,351,357,383,387,390,456,460,488,492,536,539,559],[35,36,30],"h1",{"id":37},"msc04-pl-do-not-use-comma-to-separate-statements",[39,40,41,42,46],"p",{},"Perl's comma operator ",[43,44,45],"code",{},","," performs several duties. The most widely known duty is to serve as a list separator:",[48,49,54],"pre",{"className":50,"code":51,"language":52,"meta":53,"style":53},"language-java shiki shiki-themes github-light github-dark monokai","my @list = (2, 3, 5, 7);\n","java","",[43,55,56],{"__ignoreMap":53},[57,58,61,65,69,73,76,80,83,86,88,91,93,96],"span",{"class":59,"line":60},"line",1,[57,62,64],{"class":63},"sMOD_","my @",[57,66,68],{"class":67},"sq6CD","list",[57,70,72],{"class":71},"sC2Qs"," =",[57,74,75],{"class":63}," (",[57,77,79],{"class":78},"s7F3e","2",[57,81,82],{"class":63},", ",[57,84,85],{"class":78},"3",[57,87,82],{"class":63},[57,89,90],{"class":78},"5",[57,92,82],{"class":63},[57,94,95],{"class":78},"7",[57,97,98],{"class":63},");\n",[39,100,101,102,106,107,112],{},"Outside of list context, the comma can also be used to combine multiple expressions into one statement. Each expression is evaluated, and its result is discarded. The last expression's result is returned as the result of the comma operator. Comma operators are called ",[103,104,105],"em",{},"thin commas"," [ ",[108,109,111],"a",{"href":110},"\u002Fsei-cert-perl-coding-standard\u002Fback-matter\u002Faa-bibliography#AA.Bibliography-Conway05","Conway 2005"," ]. This behavior was adopted from C.",[39,114,115],{},"The potential for confusing thin commas with commas in list context is large enough to forbid use of thin commas. Commas must be used only to separate items in list context.",[117,118,120],"h2",{"id":119},"noncompliant-code-example","Noncompliant Code Example",[39,122,123],{},"This code example validates a file and indicates if it exists.",[125,126,128],"code-block",{"quality":127},"bad",[48,129,133],{"className":130,"code":131,"language":132,"meta":53,"style":53},"language-perl shiki shiki-themes github-light github-dark monokai","sub validate_file {\n  my $file = shift(@_);\n  if (-e $file) {\n    return 1; # file exists\n  }\n  die \"$file does not exist\";\n}\n\nmy $file = $ARGV[0];\nvalidate_file($file), print \"hi!\\n\";\n","perl",[43,134,135,147,163,177,190,196,215,221,227,236],{"__ignoreMap":53},[57,136,137,140,144],{"class":59,"line":60},[57,138,139],{"class":67},"sub",[57,141,143],{"class":142},"srTi1"," validate_file",[57,145,146],{"class":63}," {\n",[57,148,150,153,156,160],{"class":59,"line":149},2,[57,151,152],{"class":71},"  my",[57,154,155],{"class":63}," $file = ",[57,157,159],{"class":158},"sTrkL","shift",[57,161,162],{"class":63},"(@_);\n",[57,164,166,169,171,174],{"class":59,"line":165},3,[57,167,168],{"class":71},"  if",[57,170,75],{"class":63},[57,172,173],{"class":71},"-e",[57,175,176],{"class":63}," $file) {\n",[57,178,180,183,186],{"class":59,"line":179},4,[57,181,182],{"class":71},"    return",[57,184,185],{"class":63}," 1; ",[57,187,189],{"class":188},"s8-w5","# file exists\n",[57,191,193],{"class":59,"line":192},5,[57,194,195],{"class":63},"  }\n",[57,197,199,202,206,209,212],{"class":59,"line":198},6,[57,200,201],{"class":71},"  die",[57,203,205],{"class":204},"sstjo"," \"",[57,207,208],{"class":63},"$file",[57,210,211],{"class":204}," does not exist\"",[57,213,214],{"class":63},";\n",[57,216,218],{"class":59,"line":217},7,[57,219,220],{"class":63},"}\n",[57,222,224],{"class":59,"line":223},8,[57,225,226],{"emptyLinePlaceholder":7},"\n",[57,228,230,233],{"class":59,"line":229},9,[57,231,232],{"class":71},"my",[57,234,235],{"class":63}," $file = $ARGV[0];\n",[57,237,239,242,245,248,251,254],{"class":59,"line":238},10,[57,240,241],{"class":63},"validate_file($file), ",[57,243,244],{"class":158},"print",[57,246,247],{"class":204}," \"hi!",[57,249,250],{"class":78},"\\n",[57,252,253],{"class":204},"\"",[57,255,214],{"class":63},[39,257,258,259,262,263,265,266,268,269,271],{},"This code behaves as expected. The comma operator is used to separate the call to ",[43,260,261],{},"validate_file"," and subsequent call to ",[43,264,244],{}," in the same statement. Consequently, the return value of ",[43,267,261],{}," is discarded before ",[43,270,244],{}," is called.",[39,273,274],{},"This line of code looks like it would behave the same but instead behaves quite differently:",[125,276,277],{"quality":127},[48,278,280],{"className":130,"code":279,"language":132,"meta":53,"style":53},"print validate_file($file), \"hi!\\n\";\n",[43,281,282],{"__ignoreMap":53},[57,283,284,286,289,292,294,296],{"class":59,"line":60},[57,285,244],{"class":158},[57,287,288],{"class":63}," validate_file($file), ",[57,290,291],{"class":204},"\"hi!",[57,293,250],{"class":78},[57,295,253],{"class":204},[57,297,214],{"class":63},[39,299,300,301,303,304,307],{},"The ",[43,302,244],{}," statement takes a list of items to print, and, in list context, the comma operator is assumed to separate list items. Consequently, if the file is valid, this program prints ",[43,305,306],{},"1"," before its friendly greeting.",[117,309,311],{"id":310},"compliant-solution-segregation","Compliant Solution (Segregation)",[39,313,314,315,317],{},"This compliant solution segregates the call to ",[43,316,261],{}," into a separate statement.",[125,319,321],{"quality":320},"good",[48,322,324],{"className":130,"code":323,"language":132,"meta":53,"style":53},"validate_file($file);\nprint \"hi!\\n\";\n",[43,325,326,331],{"__ignoreMap":53},[57,327,328],{"class":59,"line":60},[57,329,330],{"class":63},"validate_file($file);\n",[57,332,333,335,337,339,341],{"class":59,"line":149},[57,334,244],{"class":158},[57,336,247],{"class":204},[57,338,250],{"class":78},[57,340,253],{"class":204},[57,342,214],{"class":63},[117,344,346,347,350],{"id":345},"compliant-solution-do","Compliant Solution ( ",[43,348,349],{},"do"," )",[39,352,353,354,356],{},"If multiple functions must be invoked within one statement, a ",[43,355,349],{}," block can be used to evaluate a list of expressions without using list context.",[125,358,359],{"quality":320},[48,360,362],{"className":130,"code":361,"language":132,"meta":53,"style":53},"print do { validate_file($file); \"hi!\\n\"};\n",[43,363,364],{"__ignoreMap":53},[57,365,366,368,371,374,376,378,380],{"class":59,"line":60},[57,367,244],{"class":158},[57,369,370],{"class":71}," do",[57,372,373],{"class":63}," { validate_file($file); ",[57,375,291],{"class":204},[57,377,250],{"class":78},[57,379,253],{"class":204},[57,381,382],{"class":63},"};\n",[117,384,386],{"id":385},"risk-assessment","Risk Assessment",[39,388,389],{},"Using commas to separate statements can lead to unexpected program behavior and surprising results.",[391,392,393,412],"table",{},[394,395,396],"thead",{},[397,398,399,402,404,406,408,410],"tr",{},[400,401],"th",{},[400,403],{},[400,405],{},[400,407],{},[400,409],{},[400,411],{},[413,414,415,436],"tbody",{},[397,416,417,421,424,427,430,433],{},[418,419,420],"td",{},"Recommendation",[418,422,423],{},"Severity",[418,425,426],{},"Likelihood",[418,428,429],{},"Remediation Cost",[418,431,432],{},"Priority",[418,434,435],{},"Level",[397,437,438,441,444,447,450,453],{},[418,439,440],{},"MSC04-PL",[418,442,443],{},"Low",[418,445,446],{},"Probable",[418,448,449],{},"Medium",[418,451,452],{},"P4",[418,454,455],{},"L3",[117,457,459],{"id":458},"automated-detection","Automated Detection",[391,461,462,470],{},[394,463,464],{},[397,465,466,468],{},[400,467],{},[400,469],{},[413,471,472,480],{},[397,473,474,477],{},[418,475,476],{},"Tool",[418,478,479],{},"Diagnostic",[397,481,482,485],{},[418,483,484],{},"Perl::Critic",[418,486,487],{},"ValuesAndExpressions::ProhibitCommaSeparatedStatements",[117,489,491],{"id":490},"bibliography","Bibliography",[391,493,494,502],{},[394,495,496],{},[397,497,498,500],{},[400,499],{},[400,501],{},[413,503,504,515],{},[397,505,506,512],{},[418,507,508,509,511],{},"[ ",[108,510,111],{"href":110}," ]",[418,513,514],{},"\"Thin Commas,\" p. 68",[397,516,517,523],{},[418,518,508,519,511],{},[108,520,522],{"href":521},"\u002Fsei-cert-perl-coding-standard\u002Fback-matter\u002Faa-bibliography#AA.Bibliography-CPAN","CPAN",[418,524,525,531,532],{},[108,526,530],{"href":527,"rel":528},"http:\u002F\u002Fsearch.cpan.org\u002F%7Eelliotjs\u002FPerl-Critic-1.116\u002F",[529],"nofollow","Elliot Shank, Perl-Critic-1.116"," ",[108,533,487],{"href":534,"rel":535},"http:\u002F\u002Fsearch.cpan.org\u002Fdist\u002FPerl-Critic\u002Flib\u002FPerl\u002FCritic\u002FPolicy\u002FValuesAndExpressions\u002FProhibitCommaSeparatedStatements.pm",[529],[537,538],"hr",{},[39,540,541,531,548,531,553],{},[108,542,544],{"href":543},"\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fmiscellaneous-msc\u002F",[545,546],"img",{"src":547},"\u002Fattachments\u002F88890562\u002F88892207.png",[108,549,550],{"href":543},[545,551],{"src":552},"\u002Fattachments\u002F88890562\u002F88892209.png",[108,554,556],{"href":555},"\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fmiscellaneous-msc\u002Fmsc31-pl",[545,557],{"src":558},"\u002Fattachments\u002F88890562\u002F88892208.png",[560,561,562],"style",{},"html pre.shiki code .sMOD_, html code.shiki .sMOD_{--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}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 .sC2Qs, html code.shiki .sC2Qs{--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}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 .srTi1, html code.shiki .srTi1{--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}html pre.shiki code .sTrkL, html code.shiki .sTrkL{--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#66D9EF}html pre.shiki code .s8-w5, html code.shiki .s8-w5{--shiki-default:#6A737D;--shiki-dark:#6A737D;--shiki-sepia:#88846F}html pre.shiki code .sstjo, html code.shiki .sstjo{--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}",{"title":53,"searchDepth":149,"depth":149,"links":564},[565,566,567,569,570,571],{"id":119,"depth":149,"text":120},{"id":310,"depth":149,"text":311},{"id":345,"depth":149,"text":568},"Compliant Solution ( do )",{"id":385,"depth":149,"text":386},{"id":458,"depth":149,"text":459},{"id":490,"depth":149,"text":491},"Perl's comma operator , performs several duties. The most widely known duty is to serve as a list separator:","md",{"tags":575},[576,577],"msc","recommendation","\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fmiscellaneous-msc\u002Fmsc04-pl",{"title":30,"description":572},"7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F7.miscellaneous-msc\u002F6.msc04-pl","2zU2SwBflDy0M0igzb9JU3QGBa_hFzBtvHXPVTY3Zy4",[583,587],{"title":584,"path":585,"stem":586,"children":-1},"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":588,"path":589,"stem":590,"children":-1},"Object-Oriented Programming (OOP)","\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",[592],{"title":593,"path":594,"stem":595,"children":596},"SEI CERT Perl Coding Standard","\u002Fsei-cert-perl-coding-standard","7.sei-cert-perl-coding-standard\u002F1.index",[597,598,653,783,923],{"title":593,"path":594,"stem":595},{"title":599,"path":600,"stem":601,"children":602},"Front Matter","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F1.index",[603,604,608],{"title":599,"path":600,"stem":601},{"title":605,"path":606,"stem":607},"Deprecations","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fdeprecations","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F2.deprecations",{"title":609,"path":610,"stem":611,"children":612},"Introduction","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fintroduction","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F3.introduction\u002F01.index",[613,614,618,622,626,630,634,638,641,645,649],{"title":609,"path":610,"stem":611},{"title":615,"path":616,"stem":617},"Scope","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fscope","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F3.introduction\u002F01.scope",{"title":619,"path":620,"stem":621},"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":623,"path":624,"stem":625},"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":627,"path":628,"stem":629},"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":631,"path":632,"stem":633},"Usage","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fusage","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F3.introduction\u002F05.usage",{"title":635,"path":636,"stem":637},"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":386,"path":639,"stem":640},"\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":642,"path":643,"stem":644},"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":646,"path":647,"stem":648},"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":650,"path":651,"stem":652},"Acknowledgements","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fintroduction\u002Facknowledgements","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F3.introduction\u002F11.acknowledgements",{"title":654,"path":655,"stem":656,"children":657},"Rules","\u002Fsei-cert-perl-coding-standard\u002Frules","7.sei-cert-perl-coding-standard\u002F3.rules\u002F1.index",[658,659,677,703,713,743,747,760,769],{"title":654,"path":655,"stem":656},{"title":660,"path":661,"stem":662,"children":663},"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",[664,665,669,673],{"title":660,"path":661,"stem":662},{"title":666,"path":667,"stem":668},"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":670,"path":671,"stem":672},"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":674,"path":675,"stem":676},"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":678,"path":679,"stem":680,"children":681},"Expressions (EXP)","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fexpressions-exp","7.sei-cert-perl-coding-standard\u002F3.rules\u002F3.expressions-exp\u002F1.index",[682,683,687,691,695,699],{"title":678,"path":679,"stem":680},{"title":684,"path":685,"stem":686},"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":688,"path":689,"stem":690},"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":692,"path":693,"stem":694},"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":696,"path":697,"stem":698},"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":700,"path":701,"stem":702},"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":704,"path":705,"stem":706,"children":707},"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",[708,709],{"title":704,"path":705,"stem":706},{"title":710,"path":711,"stem":712},"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":714,"path":715,"stem":716,"children":717},"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",[718,719,723,727,731,735,739],{"title":714,"path":715,"stem":716},{"title":720,"path":721,"stem":722},"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":724,"path":725,"stem":726},"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":728,"path":729,"stem":730},"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":732,"path":733,"stem":734},"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":736,"path":737,"stem":738},"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":740,"path":741,"stem":742},"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":744,"path":745,"stem":746},"Integers (INT)","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fintegers-int","7.sei-cert-perl-coding-standard\u002F3.rules\u002F6.integers-int",{"title":748,"path":749,"stem":750,"children":751},"Miscellaneous (MSC)","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fmiscellaneous-msc","7.sei-cert-perl-coding-standard\u002F3.rules\u002F7.miscellaneous-msc\u002F1.index",[752,753,756],{"title":748,"path":749,"stem":750},{"title":754,"path":555,"stem":755},"MSC31-PL. Do not embed global statements","7.sei-cert-perl-coding-standard\u002F3.rules\u002F7.miscellaneous-msc\u002F2.msc31-pl",{"title":757,"path":758,"stem":759},"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":588,"path":761,"stem":762,"children":763},"\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",[764,765],{"title":588,"path":761,"stem":762},{"title":766,"path":767,"stem":768},"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":770,"path":771,"stem":772,"children":773},"Strings (STR)","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fstrings-str","7.sei-cert-perl-coding-standard\u002F3.rules\u002F9.strings-str\u002F1.index",[774,775,779],{"title":770,"path":771,"stem":772},{"title":776,"path":777,"stem":778},"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":780,"path":781,"stem":782},"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":784,"path":785,"stem":786,"children":787},"Recommendations","\u002Fsei-cert-perl-coding-standard\u002Frecommendations","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F1.index",[788,789,818,851,864,877,890,909,920],{"title":784,"path":785,"stem":786},{"title":660,"path":790,"stem":791,"children":792},"\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",[793,794,798,802,806,810,814],{"title":660,"path":790,"stem":791},{"title":795,"path":796,"stem":797},"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":799,"path":800,"stem":801},"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":803,"path":804,"stem":805},"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":807,"path":808,"stem":809},"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":811,"path":812,"stem":813},"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":815,"path":816,"stem":817},"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":678,"path":819,"stem":820,"children":821},"\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fexpressions-exp","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F3.expressions-exp\u002F1.index",[822,823,827,831,835,839,843,847],{"title":678,"path":819,"stem":820},{"title":824,"path":825,"stem":826},"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":828,"path":829,"stem":830},"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":832,"path":833,"stem":834},"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":836,"path":837,"stem":838},"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":840,"path":841,"stem":842},"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":844,"path":845,"stem":846},"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":848,"path":849,"stem":850},"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":704,"path":852,"stem":853,"children":854},"\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",[855,856,860],{"title":704,"path":852,"stem":853},{"title":857,"path":858,"stem":859},"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":861,"path":862,"stem":863},"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":714,"path":865,"stem":866,"children":867},"\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",[868,869,873],{"title":714,"path":865,"stem":866},{"title":870,"path":871,"stem":872},"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":874,"path":875,"stem":876},"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":744,"path":878,"stem":879,"children":880},"\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fintegers-int","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F6.integers-int\u002F1.index",[881,882,886],{"title":744,"path":878,"stem":879},{"title":883,"path":884,"stem":885},"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":887,"path":888,"stem":889},"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":748,"path":891,"stem":892,"children":893},"\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fmiscellaneous-msc","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F7.miscellaneous-msc\u002F1.index",[894,895,899,903,907,908],{"title":748,"path":891,"stem":892},{"title":896,"path":897,"stem":898},"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":900,"path":901,"stem":902},"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":904,"path":905,"stem":906},"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":584,"path":585,"stem":586},{"title":30,"path":578,"stem":580},{"title":588,"path":589,"stem":590,"children":910},[911,912,916],{"title":588,"path":589,"stem":590},{"title":913,"path":914,"stem":915},"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":917,"path":918,"stem":919},"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":770,"path":921,"stem":922},"\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fstrings-str","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F9.strings-str",{"title":924,"path":925,"stem":926,"children":927},"Back Matter","\u002Fsei-cert-perl-coding-standard\u002Fback-matter","7.sei-cert-perl-coding-standard\u002F5.back-matter\u002F1.index",[928,929,933,963],{"title":924,"path":925,"stem":926},{"title":930,"path":931,"stem":932},"AA. Bibliography","\u002Fsei-cert-perl-coding-standard\u002Fback-matter\u002Faa-bibliography","7.sei-cert-perl-coding-standard\u002F5.back-matter\u002F2.aa-bibliography",{"title":934,"path":935,"stem":936,"children":937},"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",[938,939,943,947,951,955,959],{"title":934,"path":935,"stem":936},{"title":940,"path":941,"stem":942},"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":944,"path":945,"stem":946},"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":948,"path":949,"stem":950},"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":952,"path":953,"stem":954},"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":956,"path":957,"stem":958},"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":960,"path":961,"stem":962},"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":964,"path":965,"stem":966},"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",1775657794532]