[{"data":1,"prerenderedAt":1029},["ShallowReactive",2],{"global-navigation":3,"page-\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fstrings-str\u002Fstr30-pl":28,"surround-\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fstrings-str\u002Fstr30-pl":644,"sidebar-sei-cert-perl-coding-standard":652},[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":634,"extension":635,"meta":636,"navigation":7,"path":640,"seo":641,"stem":642,"__hash__":643},"content\u002F7.sei-cert-perl-coding-standard\u002F3.rules\u002F9.strings-str\u002F2.str30-pl.md","STR30-PL. Capture variables should be read only immediately after a successful regex match",{"type":32,"value":33,"toc":627},"minimark",[34,38,64,70,73,78,81,248,251,268,281,285,288,424,426,434,437,441,508,512,540,544,600,603,623],[35,36,30],"h1",{"id":37},"str30-pl-capture-variables-should-be-read-only-immediately-after-a-successful-regex-match",[39,40,41,42,46,47,50,51,58,59,63],"p",{},"Perl's capture variables ( ",[43,44,45],"code",{},"$1"," , ",[43,48,49],{},"$2"," , etc.) are assigned the values of capture expressions after a regular expression (regex) match has been found. If a regex fails to find a match, the contents of the capture variables can remain undefined. The ",[52,53,57],"a",{"href":54,"rel":55},"http:\u002F\u002Fperldoc.perl.org\u002Fperlre.html",[56],"nofollow","perlre"," manpage [ ",[52,60,62],{"href":61},"\u002Fsei-cert-perl-coding-standard\u002Fback-matter\u002Faa-bibliography#AA.Bibliography-Manpages","Wall 2011"," ] contains this note:",[65,66,67],"blockquote",{},[39,68,69],{},"NOTE: Failed matches in Perl do not reset the match variables, which makes it easier to write code that tests for a series of more specific cases and remembers the best match.",[39,71,72],{},"Consequently, the value of a capture variable can be indeterminate if a previous regex failed. The value can also be overwritten on subsequent regex matches. Always ensure that a regex was successful before reading its capture variables.",[74,75,77],"h2",{"id":76},"noncompliant-code-example","Noncompliant Code Example",[39,79,80],{},"This noncompliant code example demonstrates the hazards of relying on capture variables without testing the success of a regex.",[82,83,85],"code-block",{"quality":84},"bad",[86,87,92],"pre",{"className":88,"code":89,"language":90,"meta":91,"style":91},"language-perl shiki shiki-themes github-light github-dark monokai","my $data = \"[    4.693540] sr 1:0:0:0: Attached scsi CD-ROM sr0\";\n\nmy $cd;\nmy $time;\n\n$data =~ \u002FAttached scsi CD-ROM (.*)\u002F;\n$cd = $1;\nprint \"cd is $cd\\n\";\n\n$data =~ \u002F\\[(\\d*)\\].*\u002F;  # this regex will fail\n$time = $1;\nprint \"time is $time\\n\";\n","perl","",[43,93,94,114,120,128,136,141,157,163,185,190,225,231],{"__ignoreMap":91},[95,96,99,103,107,111],"span",{"class":97,"line":98},"line",1,[95,100,102],{"class":101},"sC2Qs","my",[95,104,106],{"class":105},"sMOD_"," $data = ",[95,108,110],{"class":109},"sstjo","\"[    4.693540] sr 1:0:0:0: Attached scsi CD-ROM sr0\"",[95,112,113],{"class":105},";\n",[95,115,117],{"class":97,"line":116},2,[95,118,119],{"emptyLinePlaceholder":7},"\n",[95,121,123,125],{"class":97,"line":122},3,[95,124,102],{"class":101},[95,126,127],{"class":105}," $cd;\n",[95,129,131,133],{"class":97,"line":130},4,[95,132,102],{"class":101},[95,134,135],{"class":105}," $time;\n",[95,137,139],{"class":97,"line":138},5,[95,140,119],{"emptyLinePlaceholder":7},[95,142,144,147,149,153,155],{"class":97,"line":143},6,[95,145,146],{"class":105},"$data =~ ",[95,148,6],{"class":109},[95,150,152],{"class":151},"sFxd3","Attached scsi CD-ROM (.*)",[95,154,6],{"class":109},[95,156,113],{"class":105},[95,158,160],{"class":97,"line":159},7,[95,161,162],{"class":105},"$cd = $1;\n",[95,164,166,170,173,176,180,183],{"class":97,"line":165},8,[95,167,169],{"class":168},"sTrkL","print",[95,171,172],{"class":109}," \"cd is ",[95,174,175],{"class":105},"$cd",[95,177,179],{"class":178},"s7F3e","\\n",[95,181,182],{"class":109},"\"",[95,184,113],{"class":105},[95,186,188],{"class":97,"line":187},9,[95,189,119],{"emptyLinePlaceholder":7},[95,191,193,195,197,201,204,207,210,213,216,218,221],{"class":97,"line":192},10,[95,194,146],{"class":105},[95,196,6],{"class":109},[95,198,200],{"class":199},"sHuvb","\\[",[95,202,203],{"class":151},"(",[95,205,206],{"class":199},"\\d",[95,208,209],{"class":151},"*)",[95,211,212],{"class":199},"\\]",[95,214,215],{"class":151},".*",[95,217,6],{"class":109},[95,219,220],{"class":105},";  ",[95,222,224],{"class":223},"s8-w5","# this regex will fail\n",[95,226,228],{"class":97,"line":227},11,[95,229,230],{"class":105},"$time = $1;\n",[95,232,234,236,239,242,244,246],{"class":97,"line":233},12,[95,235,169],{"class":168},[95,237,238],{"class":109}," \"time is ",[95,240,241],{"class":105},"$time",[95,243,179],{"class":178},[95,245,182],{"class":109},[95,247,113],{"class":105},[39,249,250],{},"This code produces the following output:",[86,252,256],{"className":253,"code":254,"language":255,"meta":91,"style":91},"language-java shiki shiki-themes github-light github-dark monokai","cd is sr0\ntime is sr0\n","java",[43,257,258,263],{"__ignoreMap":91},[95,259,260],{"class":97,"line":98},[95,261,262],{"class":105},"cd is sr0\n",[95,264,265],{"class":97,"line":116},[95,266,267],{"class":105},"time is sr0\n",[39,269,270,271,273,274,276,277,280],{},"The surprising value for the ",[43,272,241],{}," variable arises because the regex fails, leaving the capture variable ",[43,275,45],{}," still holding its previously assigned value ",[43,278,279],{},"sr0"," .",[74,282,284],{"id":283},"compliant-solution","Compliant Solution",[39,286,287],{},"In this compliant solution, both regular expressions are checked for success before the capture variables are accessed.",[82,289,291],{"quality":290},"good",[86,292,294],{"className":88,"code":293,"language":90,"meta":91,"style":91},"my $data = \"[    4.693540] sr 1:0:0:0: Attached scsi CD-ROM sr0\";\n\nmy $cd;\nmy $time;\n\nif ($data =~ \u002FAttached scsi CD-ROM (.*)\u002F) {\n  $cd = $1;\n  print \"cd is $cd\\n\";\n}\n\nif ($data =~ \u002F\\[(\\d*)\\].*\u002F) {  # this regex will fail\n  $time = $1;\n  print \"time is $time\\n\";\n}\n",[43,295,296,306,310,316,322,326,343,348,363,368,372,399,404,419],{"__ignoreMap":91},[95,297,298,300,302,304],{"class":97,"line":98},[95,299,102],{"class":101},[95,301,106],{"class":105},[95,303,110],{"class":109},[95,305,113],{"class":105},[95,307,308],{"class":97,"line":116},[95,309,119],{"emptyLinePlaceholder":7},[95,311,312,314],{"class":97,"line":122},[95,313,102],{"class":101},[95,315,127],{"class":105},[95,317,318,320],{"class":97,"line":130},[95,319,102],{"class":101},[95,321,135],{"class":105},[95,323,324],{"class":97,"line":138},[95,325,119],{"emptyLinePlaceholder":7},[95,327,328,331,334,336,338,340],{"class":97,"line":143},[95,329,330],{"class":101},"if",[95,332,333],{"class":105}," ($data =~ ",[95,335,6],{"class":109},[95,337,152],{"class":151},[95,339,6],{"class":109},[95,341,342],{"class":105},") {\n",[95,344,345],{"class":97,"line":159},[95,346,347],{"class":105},"  $cd = $1;\n",[95,349,350,353,355,357,359,361],{"class":97,"line":165},[95,351,352],{"class":168},"  print",[95,354,172],{"class":109},[95,356,175],{"class":105},[95,358,179],{"class":178},[95,360,182],{"class":109},[95,362,113],{"class":105},[95,364,365],{"class":97,"line":187},[95,366,367],{"class":105},"}\n",[95,369,370],{"class":97,"line":192},[95,371,119],{"emptyLinePlaceholder":7},[95,373,374,376,378,380,382,384,386,388,390,392,394,397],{"class":97,"line":227},[95,375,330],{"class":101},[95,377,333],{"class":105},[95,379,6],{"class":109},[95,381,200],{"class":199},[95,383,203],{"class":151},[95,385,206],{"class":199},[95,387,209],{"class":151},[95,389,212],{"class":199},[95,391,215],{"class":151},[95,393,6],{"class":109},[95,395,396],{"class":105},") {  ",[95,398,224],{"class":223},[95,400,401],{"class":97,"line":233},[95,402,403],{"class":105},"  $time = $1;\n",[95,405,407,409,411,413,415,417],{"class":97,"line":406},13,[95,408,352],{"class":168},[95,410,238],{"class":109},[95,412,241],{"class":105},[95,414,179],{"class":178},[95,416,182],{"class":109},[95,418,113],{"class":105},[95,420,422],{"class":97,"line":421},14,[95,423,367],{"class":105},[39,425,250],{},[86,427,428],{"className":253,"code":262,"language":255,"meta":91,"style":91},[43,429,430],{"__ignoreMap":91},[95,431,432],{"class":97,"line":98},[95,433,262],{"class":105},[39,435,436],{},"This output might not be what the developer expected, but it clearly reveals that the latter regex failed to find a match.",[74,438,440],{"id":439},"risk-assessment","Risk Assessment",[442,443,444,445,444,475],"table",{},"\n  ",[446,447,448,449,444],"thead",{},"\n    ",[450,451,452,453,452,457,452,460,452,463,452,466,452,469,452,472,448],"tr",{},"\n      ",[454,455,456],"th",{},"Rule",[454,458,459],{},"Severity",[454,461,462],{},"Likelihood",[454,464,465],{},"Detectable",[454,467,468],{},"Repairable",[454,470,471],{},"Priority",[454,473,474],{},"Level",[476,477,448,478,444],"tbody",{},[450,479,452,480,452,484,452,487,452,490,452,493,452,496,452,503,448],{},[481,482,483],"td",{},"STR30-PL",[481,485,486],{},"Medium",[481,488,489],{},"Probable",[481,491,492],{},"Yes",[481,494,495],{},"No",[481,497,499],{"style":498},"color: #f1c40f;",[500,501,502],"b",{},"P8",[481,504,505],{"style":498},[500,506,507],{},"L2",[74,509,511],{"id":510},"automated-detection","Automated Detection",[442,513,514,522],{},[446,515,516],{},[450,517,518,520],{},[454,519],{},[454,521],{},[476,523,524,532],{},[450,525,526,529],{},[481,527,528],{},"Tool",[481,530,531],{},"Diagnostic",[450,533,534,537],{},[481,535,536],{},"Perl::Critic",[481,538,539],{},"RegularExpressions::ProhibitCaptureWithoutTest",[74,541,543],{"id":542},"bibliography","Bibliography",[442,545,546,554],{},[446,547,548],{},[450,549,550,552],{},[454,551],{},[454,553],{},[476,555,556,569,589],{},[450,557,558,566],{},[481,559,560,561,565],{},"[ ",[52,562,564],{"href":563},"\u002Fsei-cert-perl-coding-standard\u002Fback-matter\u002Faa-bibliography#AA.Bibliography-Conway05","Conway 05"," ]",[481,567,568],{},"\"Captured Values,\" p. 253",[450,570,571,577],{},[481,572,560,573,565],{},[52,574,576],{"href":575},"\u002Fsei-cert-perl-coding-standard\u002Fback-matter\u002Faa-bibliography#AA.Bibliography-CPAN","CPAN",[481,578,579,584,585],{},[52,580,583],{"href":581,"rel":582},"http:\u002F\u002Fsearch.cpan.org\u002F%7Eelliotjs\u002FPerl-Critic-1.116\u002F",[56],"Elliot Shank, Perl-Critic-1.116"," ",[52,586,539],{"href":587,"rel":588},"http:\u002F\u002Fsearch.cpan.org\u002Fdist\u002FPerl-Critic\u002Flib\u002FPerl\u002FCritic\u002FPolicy\u002FRegularExpressions\u002FProhibitCaptureWithoutTest.pm",[56],[450,590,591,595],{},[481,592,560,593,565],{},[52,594,62],{"href":61},[481,596,597],{},[52,598,57],{"href":54,"rel":599},[56],[601,602],"hr",{},[39,604,605,584,612,584,617],{},[52,606,608],{"href":607},"\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fstrings-str\u002F",[609,610],"img",{"src":611},"\u002Fattachments\u002F88890562\u002F88892207.png",[52,613,614],{"href":607},[609,615],{"src":616},"\u002Fattachments\u002F88890562\u002F88892209.png",[52,618,620],{"href":619},"\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fstrings-str\u002Fstr31-pl",[609,621],{"src":622},"\u002Fattachments\u002F88890562\u002F88892208.png",[624,625,626],"style",{},"html pre.shiki code .sC2Qs, html code.shiki .sC2Qs{--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}html pre.shiki code .sMOD_, html code.shiki .sMOD_{--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .sstjo, html code.shiki .sstjo{--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .sFxd3, html code.shiki .sFxd3{--shiki-default:#032F62;--shiki-dark:#DBEDFF;--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 pre.shiki code .sHuvb, html code.shiki .sHuvb{--shiki-default:#22863A;--shiki-default-font-weight:bold;--shiki-dark:#85E89D;--shiki-dark-font-weight:bold;--shiki-sepia:#AE81FF;--shiki-sepia-font-weight:inherit}html pre.shiki code .s8-w5, html code.shiki .s8-w5{--shiki-default:#6A737D;--shiki-dark:#6A737D;--shiki-sepia:#88846F}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":91,"searchDepth":116,"depth":116,"links":628},[629,630,631,632,633],{"id":76,"depth":116,"text":77},{"id":283,"depth":116,"text":284},{"id":439,"depth":116,"text":440},{"id":510,"depth":116,"text":511},{"id":542,"depth":116,"text":543},"Perl's capture variables ( $1 , $2 , etc.) are assigned the values of capture expressions after a regular expression (regex) match has been found. If a regex fails to find a match, the contents of the capture variables can remain undefined. The perlre manpage [ Wall 2011 ] contains this note:","md",{"tags":637},[638,639],"str","rule","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fstrings-str\u002Fstr30-pl",{"title":30,"description":634},"7.sei-cert-perl-coding-standard\u002F3.rules\u002F9.strings-str\u002F2.str30-pl","dycS8cs_DZ1pUFSQs543ZuFfV154DzzbL_gQkKpWNFQ",[645,649],{"title":646,"path":647,"stem":648,"children":-1},"Strings (STR)","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fstrings-str","7.sei-cert-perl-coding-standard\u002F3.rules\u002F9.strings-str\u002F1.index",{"title":650,"path":619,"stem":651,"children":-1},"STR31-PL. Do not pass string literals to functions expecting regexes","7.sei-cert-perl-coding-standard\u002F3.rules\u002F9.strings-str\u002F3.str31-pl",[653],{"title":654,"path":655,"stem":656,"children":657},"SEI CERT Perl Coding Standard","\u002Fsei-cert-perl-coding-standard","7.sei-cert-perl-coding-standard\u002F1.index",[658,659,714,837,985],{"title":654,"path":655,"stem":656},{"title":660,"path":661,"stem":662,"children":663},"Front Matter","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F1.index",[664,665,669],{"title":660,"path":661,"stem":662},{"title":666,"path":667,"stem":668},"Deprecations","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fdeprecations","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F2.deprecations",{"title":670,"path":671,"stem":672,"children":673},"Introduction","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fintroduction","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F3.introduction\u002F01.index",[674,675,679,683,687,691,695,699,702,706,710],{"title":670,"path":671,"stem":672},{"title":676,"path":677,"stem":678},"Scope","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fscope","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F3.introduction\u002F01.scope",{"title":680,"path":681,"stem":682},"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":684,"path":685,"stem":686},"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":688,"path":689,"stem":690},"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":692,"path":693,"stem":694},"Usage","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fusage","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F3.introduction\u002F05.usage",{"title":696,"path":697,"stem":698},"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":440,"path":700,"stem":701},"\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":703,"path":704,"stem":705},"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":707,"path":708,"stem":709},"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":711,"path":712,"stem":713},"Acknowledgements","\u002Fsei-cert-perl-coding-standard\u002Ffront-matter\u002Fintroduction\u002Facknowledgements","7.sei-cert-perl-coding-standard\u002F2.front-matter\u002F3.introduction\u002F11.acknowledgements",{"title":715,"path":716,"stem":717,"children":718},"Rules","\u002Fsei-cert-perl-coding-standard\u002Frules","7.sei-cert-perl-coding-standard\u002F3.rules\u002F1.index",[719,720,738,764,774,804,808,822,832],{"title":715,"path":716,"stem":717},{"title":721,"path":722,"stem":723,"children":724},"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",[725,726,730,734],{"title":721,"path":722,"stem":723},{"title":727,"path":728,"stem":729},"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":731,"path":732,"stem":733},"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":735,"path":736,"stem":737},"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":739,"path":740,"stem":741,"children":742},"Expressions (EXP)","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fexpressions-exp","7.sei-cert-perl-coding-standard\u002F3.rules\u002F3.expressions-exp\u002F1.index",[743,744,748,752,756,760],{"title":739,"path":740,"stem":741},{"title":745,"path":746,"stem":747},"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":749,"path":750,"stem":751},"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":753,"path":754,"stem":755},"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":757,"path":758,"stem":759},"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":761,"path":762,"stem":763},"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":765,"path":766,"stem":767,"children":768},"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",[769,770],{"title":765,"path":766,"stem":767},{"title":771,"path":772,"stem":773},"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":775,"path":776,"stem":777,"children":778},"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",[779,780,784,788,792,796,800],{"title":775,"path":776,"stem":777},{"title":781,"path":782,"stem":783},"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":785,"path":786,"stem":787},"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":789,"path":790,"stem":791},"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":793,"path":794,"stem":795},"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":797,"path":798,"stem":799},"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":801,"path":802,"stem":803},"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":805,"path":806,"stem":807},"Integers (INT)","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fintegers-int","7.sei-cert-perl-coding-standard\u002F3.rules\u002F6.integers-int",{"title":809,"path":810,"stem":811,"children":812},"Miscellaneous (MSC)","\u002Fsei-cert-perl-coding-standard\u002Frules\u002Fmiscellaneous-msc","7.sei-cert-perl-coding-standard\u002F3.rules\u002F7.miscellaneous-msc\u002F1.index",[813,814,818],{"title":809,"path":810,"stem":811},{"title":815,"path":816,"stem":817},"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":819,"path":820,"stem":821},"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":823,"path":824,"stem":825,"children":826},"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",[827,828],{"title":823,"path":824,"stem":825},{"title":829,"path":830,"stem":831},"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":646,"path":647,"stem":648,"children":833},[834,835,836],{"title":646,"path":647,"stem":648},{"title":30,"path":640,"stem":642},{"title":650,"path":619,"stem":651},{"title":838,"path":839,"stem":840,"children":841},"Recommendations","\u002Fsei-cert-perl-coding-standard\u002Frecommendations","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F1.index",[842,843,872,905,918,931,944,969,982],{"title":838,"path":839,"stem":840},{"title":721,"path":844,"stem":845,"children":846},"\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",[847,848,852,856,860,864,868],{"title":721,"path":844,"stem":845},{"title":849,"path":850,"stem":851},"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":853,"path":854,"stem":855},"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":857,"path":858,"stem":859},"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":861,"path":862,"stem":863},"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":865,"path":866,"stem":867},"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":869,"path":870,"stem":871},"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":739,"path":873,"stem":874,"children":875},"\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fexpressions-exp","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F3.expressions-exp\u002F1.index",[876,877,881,885,889,893,897,901],{"title":739,"path":873,"stem":874},{"title":878,"path":879,"stem":880},"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":882,"path":883,"stem":884},"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":886,"path":887,"stem":888},"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":890,"path":891,"stem":892},"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":894,"path":895,"stem":896},"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":898,"path":899,"stem":900},"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":902,"path":903,"stem":904},"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":765,"path":906,"stem":907,"children":908},"\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",[909,910,914],{"title":765,"path":906,"stem":907},{"title":911,"path":912,"stem":913},"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":915,"path":916,"stem":917},"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":775,"path":919,"stem":920,"children":921},"\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",[922,923,927],{"title":775,"path":919,"stem":920},{"title":924,"path":925,"stem":926},"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":928,"path":929,"stem":930},"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":805,"path":932,"stem":933,"children":934},"\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fintegers-int","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F6.integers-int\u002F1.index",[935,936,940],{"title":805,"path":932,"stem":933},{"title":937,"path":938,"stem":939},"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":941,"path":942,"stem":943},"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":809,"path":945,"stem":946,"children":947},"\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fmiscellaneous-msc","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F7.miscellaneous-msc\u002F1.index",[948,949,953,957,961,965],{"title":809,"path":945,"stem":946},{"title":950,"path":951,"stem":952},"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":954,"path":955,"stem":956},"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":958,"path":959,"stem":960},"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":962,"path":963,"stem":964},"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":966,"path":967,"stem":968},"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":823,"path":970,"stem":971,"children":972},"\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",[973,974,978],{"title":823,"path":970,"stem":971},{"title":975,"path":976,"stem":977},"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":979,"path":980,"stem":981},"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":646,"path":983,"stem":984},"\u002Fsei-cert-perl-coding-standard\u002Frecommendations\u002Fstrings-str","7.sei-cert-perl-coding-standard\u002F4.recommendations\u002F9.strings-str",{"title":986,"path":987,"stem":988,"children":989},"Back Matter","\u002Fsei-cert-perl-coding-standard\u002Fback-matter","7.sei-cert-perl-coding-standard\u002F5.back-matter\u002F1.index",[990,991,995,1025],{"title":986,"path":987,"stem":988},{"title":992,"path":993,"stem":994},"AA. Bibliography","\u002Fsei-cert-perl-coding-standard\u002Fback-matter\u002Faa-bibliography","7.sei-cert-perl-coding-standard\u002F5.back-matter\u002F2.aa-bibliography",{"title":996,"path":997,"stem":998,"children":999},"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",[1000,1001,1005,1009,1013,1017,1021],{"title":996,"path":997,"stem":998},{"title":1002,"path":1003,"stem":1004},"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":1006,"path":1007,"stem":1008},"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":1010,"path":1011,"stem":1012},"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":1014,"path":1015,"stem":1016},"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":1018,"path":1019,"stem":1020},"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":1022,"path":1023,"stem":1024},"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":1026,"path":1027,"stem":1028},"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",1775657794021]