{
  "ml": {
    "v": "4",
    "fs": [
      {
        "id": 0,
        "prob": 0.0013596616918221116,
        "class": 0
      },
      {
        "id": 1,
        "prob": 0.0012669789139181376,
        "class": 0
      }
    ],
    "prob": 0.0013596617,
    "class": 0,
    "models": [
      {
        "m": "az",
        "prob": 0.00010954671,
        "class": 0
      },
      {
        "m": "az/archive",
        "prob": 0.0013596617,
        "class": 0
      }
    ],
    "version": "v16.16",
    "thresholds": [
      0.9953178,
      0.9991311
    ],
    "analyzed_at": "2026-05-03T07:31:13Z"
  },
  "path": "perlmodstyle.1perl.gz",
  "raw": {
    "v": "4",
    "fs": [
      {
        "f": "O₃(C₂As₂I)Md₂(Pa)",
        "x": 2,
        "id": 0,
        "sz": 9735,
        "ts": [
          {
            "c": 0.949999988079071,
            "d": "Roff heading prose macros",
            "e": [
              ".PP"
            ],
            "i": "metadata/file/text::roff-heading-macros",
            "l": 1
          },
          {
            "c": 1.0,
            "d": "Make install clean command",
            "e": [
              "make install"
            ],
            "i": "objectives/impact/wipe/disk/mass-delete::make-install-clean-command",
            "l": 1
          },
          {
            "c": 0.6000000238418579,
            "d": "LICENSE file reference",
            "e": [
              "LICENSE"
            ],
            "i": "metadata/package/license::license-upper",
            "l": 2
          },
          {
            "c": 1.0,
            "d": "Path-like string pattern",
            "e": [
              "x:\\\\$1\\t\\\\n%\\t\"\\\\$2\""
            ],
            "i": "micro-behaviors/data/text/malware::path-like-pattern",
            "l": 2
          },
          {
            "c": 0.8999999761581421,
            "d": "File has 30 or more lines",
            "e": [
              "text.total_lines = 671.00"
            ],
            "i": "metadata/package/metrics::file-has-30-plus-lines",
            "l": 1
          },
          {
            "c": 0.8600000143051147,
            "d": "Embedded string exceeds 3000 chars",
            "e": [
              "strings.max_length = 4304.00"
            ],
            "i": "objectives/command-and-control/dropper/execution::js-max-string-over-3000",
            "l": 3
          },
          {
            "c": 0.699999988079071,
            "d": "before() hook",
            "e": [
              "before"
            ],
            "i": "metadata/package/testing/scripted::mocha-before",
            "l": 2
          },
          {
            "c": 0.699999988079071,
            "d": "Package references CHANGELOG",
            "e": [
              "changelog"
            ],
            "i": "metadata/package/documentation::references-changelog-1",
            "l": 2
          },
          {
            "c": 0.20000000298023224,
            "d": "output keyword",
            "e": [
              "output"
            ],
            "i": "micro-behaviors/data/text/keywords::output",
            "l": 1
          },
          {
            "a": "T1027",
            "c": 0.6000000238418579,
            "d": "No comments in code",
            "e": [
              "comments.total = 0.00"
            ],
            "i": "objectives/anti-static/obfuscation/code-metrics/structure::no-comments",
            "l": 1,
            "m": "B0032"
          },
          {
            "c": 1.0,
            "d": "perl string",
            "e": [
              "\n.    ds C'\n'br\\}\n.\\\"\n.\\\" Escape single quotes in literal strings from groff's Unicode transform.\n.ie \\n(.g .ds Aq \\(aq\n.el     ",
              "\n.IX Title \"PERLMODSTYLE 1perl\"\n.TH PERLMODSTYLE 1perl 2026-04-11 \"perl v5.42.2\" \"Perl Programmers Reference Guide\"\n.",
              " way too many mistakes in technical documents.\n.if n .ad l\n.nh\n.SH NAME\nperlmodstyle ",
              " Perl module style guide\n.SH INTRODUCTION\n.IX Header \"INTRODUCTION\"\nThis document attempts to describe the Perl Community",
              "(Aqs \"best practice\"\nfor writing Perl modules.  It extends the recommendations found in \nperlstyle , which should be considered ",
              "(Aqs internals.\n.PP\nThis document differs from perlnewmod in that it is a style guide\nrather than a tutorial on creating CPAN mo",
              "use\\*(C'\\fR\n.IP \\(bu 4\nInclude tests with your module\n.IP \\(bu 4\nChoose a sensible and consistent version numbering scheme (X.YY",
              "bu 4\nChoose a sensible and consistent version numbering scheme (X.YY is the common Perl module numbering scheme)\n.IP ",
              "(Aqs already \nbeen done in Perl, and avoid re",
              "NAME\\*(C'\\fR) is a relic of older versions of Perl in which\nordinary lower case strings were not handled correctly by the \\f(CW\\",
              "R) is a relic of older versions of Perl in which\nordinary lower case strings were not handled correctly by the ",
              "errstr\\*(C'\\fR is a common name used by\nDBI and other popular modules; if you choose something else, be sure to\ndocument it clea",
              "handling\nroutine, or other such features.  Be sure to default all these options\nto the commonest use.\n.SH \"DOCUMENTING YOUR MODU",
              "bu 4\nA contact email address for the author/maintainer\n.PP\nThe level of detail in Perl module documentation generally goes from\n",
              "(Aqs slightly familiar with your module should be able\nto refresh their memory without hitting \"page down\".  As your reader\ncont",
              "(Aqs subroutine.  This makes it easier to keep the documentation up\nto date, and avoids having to document each piece of code tw"
            ],
            "i": "objectives/command-and-control/dropper::perl-str",
            "l": 1
          },
          {
            "a": "T1027",
            "c": 0.800000011920929,
            "d": "Sequential identifiers (a, b, c,",
            "e": [
              "identifiers.sequential_names = 12.00"
            ],
            "i": "objectives/anti-static/obfuscation/code-metrics/identifiers::sequential-identifiers",
            "l": 2,
            "m": "B0032"
          },
          {
            "c": 1.0,
            "d": "Package references CHANGES",
            "e": [
              "changes"
            ],
            "i": "metadata/package/documentation::references-changelog-changes",
            "l": 2
          },
          {
            "c": 0.699999988079071,
            "d": "GPL license reference",
            "e": [
              "GPL"
            ],
            "i": "metadata/package/license::gpl-word",
            "l": 2
          },
          {
            "a": "T1027",
            "c": 0.8999999761581421,
            "d": "Low string density base64 context",
            "e": [
              "text.string_density = 0.45"
            ],
            "i": "objectives/anti-static/obfuscation/code-metrics::js-base64-candidate-low-string-density",
            "l": 1,
            "m": "B0032"
          },
          {
            "c": 0.30000001192092896,
            "d": "stderr string reference",
            "e": [
              "\n.    ds C'\n'br\\}\n.\\\"\n.\\\" Escape single quotes in literal strings from groff's Unicode transform.\n.ie \\n(.g .ds Aq \\(aq\n.el     ",
              " If the F register is \u003e0, we'll generate index entries on stderr for\n."
            ],
            "i": "micro-behaviors/process/fd/stdio::stderr-string",
            "l": 2
          }
        ],
        "sha": "5a65a8274d54e858e9bdd32a105480bdd7f8cc9ce32f9ecde3a7b400f130044f",
        "path": "perlmodstyle.1perl.gz",
        "type": "gz"
      },
      {
        "f": "O₃(C₂As₂I)Md₂(Pa)",
        "x": 2,
        "dp": 1,
        "id": 1,
        "is": [
          "information",
          "descriptive",
          "before",
          "oriented",
          "Published",
          "two",
          "list",
          "parse_version",
          "VERSION",
          "XS_VERSION",
          "CW$VERSION.PP",
          "C.SS.IX",
          "modules",
          "tests",
          "don",
          "licenses"
        ],
        "ms": {
          "text": {
            "digit_ratio": 0.01,
            "space_count": 3874.0,
            "total_lines": 671.0,
            "char_entropy": 4.94,
            "unique_chars": 86.0,
            "import_density": 2.38,
            "string_density": 0.45,
            "ascii_art_lines": 2.0,
            "avg_line_length": 38.2,
            "max_line_length": 109.0,
            "last_line_length": 37.0,
            "most_common_char": "e",
            "whitespace_ratio": 0.17,
            "most_common_ratio": 0.09,
            "identifier_density": 2.7,
            "line_length_stddev": 27.34,
            "normalized_import_count": 0.62,
            "normalized_string_count": 11.62,
            "repeated_char_sequences": 10.0,
            "suspicious_string_ratio": 0.07,
            "max_inline_whitespace_run": 60.0,
            "trailing_whitespace_lines": 38.0,
            "suspicious_identifier_ratio": 0.02,
            "normalized_unique_identifiers": 71.78
          },
          "imports": {
            "total": 16.0,
            "unique_modules": 16.0,
            "third_party_count": 16.0,
            "third_party_ratio": 1.0
          },
          "strings": {
            "total": 301.0,
            "avg_length": 84.4,
            "max_length": 4304.0,
            "avg_entropy": 3.15,
            "sql_strings": 9.0,
            "total_bytes": 25403.0,
            "entropy_stddev": 1.14,
            "very_long_strings": 5.0,
            "shell_command_strings": 11.0,
            "embedded_code_candidates": 2.0
          },
          "comments": {},
          "functions": {},
          "identifiers": {
            "total": 1812.0,
            "avg_length": 6.15,
            "max_length": 15.0,
            "min_length": 1.0,
            "avg_entropy": 2.24,
            "reuse_ratio": 0.37,
            "unique_count": 674.0,
            "length_stddev": 2.7,
            "has_digit_ratio": 0.0,
            "sequential_names": 12.0,
            "single_char_count": 11.0,
            "single_char_ratio": 0.02,
            "all_lowercase_ratio": 0.8,
            "all_uppercase_ratio": 0.03,
            "repeated_char_names": 1.0,
            "numeric_suffix_count": 1.0
          }
        },
        "ss": [
          [
            218,
            " Vertical space (when we can't use .PP)"
          ],
          [
            294,
            " Begin verbatim text"
          ],
          [
            347,
            " End verbatim text"
          ],
          [
            387,
            " and \\*(C' are quotes in nroff, nothing in troff, for use with C\u003c\u003e.\n.ie n \\{\\\n.    ds C"
          ],
          [
            388,
            " and "
          ],
          [
            395,
            "(C' are quotes in nroff, nothing in troff, for use with C\u003c\u003e.\n.ie n "
          ],
          [
            466,
            ".    ds C"
          ],
          [
            489,
            " \"\"\n"
          ],
          [
            490,
            " "
          ],
          [
            516,
            "\n.    ds C'\n'br\\}\n.\\\"\n.\\\" Escape single quotes in literal strings from groff's Unicode transform.\n.ie \\n(.g .ds Aq \\(aq\n.el     "
          ],
          [
            517,
            "\n.    ds C'\n'br"
          ],
          [
            534,
            "\n."
          ],
          [
            538,
            "\n."
          ],
          [
            542,
            " Escape single quotes in literal strings from groff's Unicode transform.\n.ie "
          ],
          [
            621,
            "(.g .ds Aq "
          ],
          [
            634,
            "aq\n.el       .ds Aq '\n."
          ],
          [
            659,
            "\n."
          ],
          [
            663,
            " If the F register is \u003e0, we'll generate index entries on stderr for\n."
          ],
          [
            735,
            " titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index\n."
          ],
          [
            810,
            " entries marked with X\u003c\u003e in POD.  Of course, you'll have to process the\n."
          ],
          [
            885,
            " output yourself in some meaningful fashion.\n."
          ],
          [
            933,
            "\n."
          ],
          [
            937,
            " Avoid warning from groff about undefined register 'F'.\n.de IX\n..\n.nr rF 0\n.if "
          ],
          [
            1018,
            "(.g .if rF .nr rF 1\n.if ("
          ],
          [
            1045,
            "(rF:("
          ],
          [
            1052,
            "(.g==0)) "
          ],
          [
            1065,
            ".    if "
          ],
          [
            1075,
            "F "
          ],
          [
            1081,
            ".        de IX\n.        tm Index:"
          ],
          [
            1116,
            "$1"
          ],
          [
            1122,
            "n%"
          ],
          [
            1129,
            "$2\"\n..\n.        if !"
          ],
          [
            1151,
            "F==2 "
          ],
          [
            1160,
            ".            nr % 0\n.            nr F 2\n.        "
          ],
          [
            1211,
            "\n.    "
          ],
          [
            1219,
            "\n."
          ],
          [
            1223,
            "\n.rr rF\n."
          ],
          [
            1234,
            "\n."
          ],
          [
            1238,
            " Required to disable full justification in groff 1.23.0.\n.if n .ds AD l\n."
          ],
          [
            1313,
            " ========================================================================\n."
          ],
          [
            1390,
            "\n.IX Title \"PERLMODSTYLE 1perl\"\n.TH PERLMODSTYLE 1perl 2026-04-11 \"perl v5.42.2\" \"Perl Programmers Reference Guide\"\n."
          ],
          [
            1509,
            " For nroff, turn off justification.  Always turn off hyphenation; it makes\n."
          ],
          [
            1587,
            " way too many mistakes in technical documents.\n.if n .ad l\n.nh\n.SH NAME\nperlmodstyle "
          ],
          [
            1674,
            " Perl module style guide\n.SH INTRODUCTION\n.IX Header \"INTRODUCTION\"\nThis document attempts to describe the Perl Community"
          ],
          [
            1797,
            "(Aqs \"best practice\"\nfor writing Perl modules.  It extends the recommendations found in \nperlstyle , which should be considered "
          ],
          [
            2265,
            "(Aqs \ndevelopers.  However, many of the guidelines presented in this document\ncan be extrapolated and applied successfully to a "
          ],
          [
            2401,
            "(Aqs internals.\n.PP\nThis document differs from perlnewmod in that it is a style guide\nrather than a tutorial on creating CPAN mo"
          ],
          [
            3477,
            "bu 4\nDon"
          ],
          [
            3487,
            "(Aqt re"
          ],
          [
            3496,
            "invent the wheel\n.IP "
          ],
          [
            3519,
            "bu 4\nPatch, extend or subclass an existing module where possible\n.IP "
          ],
          [
            3590,
            "bu 4\nDo one thing and do it well\n.IP "
          ],
          [
            3629,
            "bu 4\nChoose an appropriate name\n.IP "
          ],
          [
            3667,
            "bu 4\nGet feedback before publishing\n.SS \"The API\"\n.IX Subsection \"The API\"\n.IP "
          ],
          [
            3748,
            "bu 4\nAPI should be understandable by the average programmer\n.IP "
          ],
          [
            3814,
            "bu 4\nSimple methods for simple tasks\n.IP "
          ],
          [
            3857,
            "bu 4\nSeparate functionality from output\n.IP "
          ],
          [
            3903,
            "bu 4\nConsistent naming of subroutines or methods\n.IP "
          ],
          [
            3958,
            "bu 4\nUse named parameters (a hash or hashref) when there are more than two\nparameters\n.SS Stability\n.IX Subsection \"Stability\"\n."
          ],
          [
            4091,
            "bu 4\nEnsure your module works under "
          ],
          [
            4129,
            "(CW"
          ],
          [
            4134,
            "(C"
          ],
          [
            4151,
            "\\fR and \\f(CW\\*(C`\\-w\\*(C"
          ],
          [
            4154,
            "R and "
          ],
          [
            4162,
            "(CW"
          ],
          [
            4167,
            "(C"
          ],
          [
            4172,
            "w"
          ],
          [
            4175,
            "(C"
          ],
          [
            4281,
            "Documentation"
          ],
          [
            4282,
            "Documentation"
          ],
          [
            4695,
            "Release considerations"
          ],
          [
            4696,
            "Release considerations"
          ],
          [
            4735,
            "Release considerations"
          ],
          [
            4736,
            "Release considerations"
          ],
          [
            4881,
            "use\\*(C'\\fR\n.IP \\(bu 4\nInclude tests with your module\n.IP \\(bu 4\nChoose a sensible and consistent version numbering scheme (X.YY"
          ],
          [
            4882,
            "use"
          ],
          [
            4887,
            "(C"
          ],
          [
            4892,
            "R\n.IP "
          ],
          [
            4900,
            "bu 4\nInclude tests with your module\n.IP "
          ],
          [
            4942,
            "bu 4\nChoose a sensible and consistent version numbering scheme (X.YY is the common Perl module numbering scheme)\n.IP "
          ],
          [
            5061,
            "bu 4\nIncrement the version number for every change, no matter how small\n.IP "
          ],
          [
            5139,
            "bu 4\nPackage the module using \"make dist\"\n.IP "
          ],
          [
            5187,
            "bu 4\nChoose an appropriate license (GPL/Artistic is a good default)\n.SH \"BEFORE YOU START WRITING A MODULE\"\n.IX Header \"BEFORE Y"
          ],
          [
            5644,
            "(Aqs already \nbeen done in Perl, and avoid re"
          ],
          [
            5691,
            "inventing the wheel unless you have a \ngood reason.\n.PP\nGood places to look for pre"
          ],
          [
            5776,
            "existing modules include\nMetaCPAN \u003chttps://metacpan.org\u003e and asking on "
          ],
          [
            5849,
            "(CW"
          ],
          [
            5854,
            "(C"
          ],
          [
            5888,
            "R"
          ],
          [
            6122,
            "Do one thing and do it well"
          ],
          [
            6123,
            "Do one thing and do it well"
          ],
          [
            6167,
            "Do one thing and do it well"
          ],
          [
            6168,
            "Do one thing and do it well"
          ],
          [
            6719,
            "FooBar.pm provides an implementation of the FOO protocol and the"
          ],
          [
            6830,
            "Foo.pm provides an implementation of the FOO protocol.  Bar.pm"
          ],
          [
            7076,
            "What\\*(Aqs in a name?"
          ],
          [
            7077,
            "What"
          ],
          [
            7083,
            "(Aqs in a name?"
          ],
          [
            7115,
            "What's in a name?"
          ],
          [
            7116,
            "What's in a name?"
          ],
          [
            7717,
            "Get feedback before publishing"
          ],
          [
            7718,
            "Get feedback before publishing"
          ],
          [
            7765,
            "Get feedback before publishing"
          ],
          [
            7766,
            "Get feedback before publishing"
          ],
          [
            8184,
            "DESIGNING AND WRITING YOUR MODULE"
          ],
          [
            8185,
            "DESIGNING AND WRITING YOUR MODULE"
          ],
          [
            8231,
            "DESIGNING AND WRITING YOUR MODULE"
          ],
          [
            8232,
            "DESIGNING AND WRITING YOUR MODULE"
          ],
          [
            8316,
            "To OO or not to OO?"
          ],
          [
            8317,
            "To OO or not to OO?"
          ],
          [
            8353,
            "To OO or not to OO?"
          ],
          [
            8354,
            "To OO or not to OO?"
          ],
          [
            10200,
            "Write simple routines to do simple things."
          ],
          [
            10201,
            "Write simple routines to do simple things."
          ],
          [
            10256,
            "Write simple routines to do simple things."
          ],
          [
            10257,
            "Write simple routines to do simple things."
          ],
          [
            10528,
            "Separate functionality from output."
          ],
          [
            10529,
            "Separate functionality from output."
          ],
          [
            10577,
            "Separate functionality from output."
          ],
          [
            10578,
            "Separate functionality from output."
          ],
          [
            11165,
            "find(\\e\u0026wanted, $dir)\\*(C'\\fR syntax.\n.IP \"Provide sensible shortcuts and defaults.\" 4\n.IX Item \"Provide sensible shortcuts and "
          ],
          [
            11166,
            "find("
          ],
          [
            11173,
            "\u0026wanted, $dir)"
          ],
          [
            11189,
            "(C"
          ],
          [
            11194,
            "R syntax.\n.IP \"Provide sensible shortcuts and defaults.\" 4\n.IX Item \"Provide sensible shortcuts and defaults.\"\nDon"
          ],
          [
            11310,
            "(Aqt require every module user to jump through the same hoops to achieve a\nsimple result.  You can always include optional param"
          ],
          [
            11482,
            "standard behaviour.  If most of your users have to\ntype a few almost identical lines of code when they start using your\nmodule, "
          ],
          [
            11614,
            "(Aqs a sign that you should have made that behaviour a default.\nAnother good indicator that you should use defaults is if most o"
          ],
          [
            11910,
            "(Aqs better to have:\n.Sp\n.Vb 3\n"
          ],
          [
            11943,
            "        display_day();\n"
          ],
          [
            11968,
            "        display_week();\n"
          ],
          [
            11994,
            "        display_year();\n.Ve\n.Sp\nthan\n.Sp\n.Vb 3\n"
          ],
          [
            12043,
            "        display_day();\n"
          ],
          [
            12068,
            "        week_display();\n"
          ],
          [
            12094,
            "        show_year();\n.Ve\n.Sp\nThis applies equally to method names, parameter names, and anything else\nwhich is visible to the us"
          ],
          [
            12253,
            "(Aqt!)\n.IP \"Parameter passing\" 4\n.IX Item \"Parameter passing\"\nUse named parameters.  It"
          ],
          [
            12342,
            "(Aqs easier to use a hash like this:\n.Sp\n.Vb 5\n"
          ],
          [
            12391,
            "    $obj"
          ],
          [
            12401,
            "\u003edo_something(\n"
          ],
          [
            12418,
            "            name =\u003e \"wibble\",\n"
          ],
          [
            12450,
            "            type =\u003e \"text\",\n"
          ],
          [
            12480,
            "            size =\u003e 1024,\n"
          ],
          [
            12508,
            "    );\n.Ve\n.Sp\n"
          ],
          [
            12525,
            "... than to have a long list of unnamed parameters like this:\n.Sp\n.Vb 1\n"
          ],
          [
            12599,
            "    $obj"
          ],
          [
            12609,
            "\u003edo_something(\"wibble\", \"text\", 1024);\n.Ve\n.Sp\nWhile the list of arguments might work fine for one, two or even three\narguments,"
          ],
          [
            13118,
            "    $obj"
          ],
          [
            13128,
            "\u003edo_something(undef, undef, undef, undef, undef, 1024);\n.Ve\n.Sp\nProvide sensible defaults for parameters which have them.  Don"
          ],
          [
            13256,
            "(Aqt make\nyour users specify parameters which will almost always be the same.\n.Sp\nThe issue of whether to pass the arguments in "
          ],
          [
            13494,
            "(CW"
          ],
          [
            13499,
            "(C"
          ],
          [
            13515,
            "R) or entirely in "
          ],
          [
            13555,
            "NAME\\*(C'\\fR) is a relic of older versions of Perl in which\nordinary lower case strings were not handled correctly by the \\f(CW\\"
          ],
          [
            13556,
            "NAME"
          ],
          [
            13562,
            "(C"
          ],
          [
            13567,
            "R) is a relic of older versions of Perl in which\nordinary lower case strings were not handled correctly by the "
          ],
          [
            13680,
            "(CW"
          ],
          [
            13685,
            "(C"
          ],
          [
            13697,
            "R"
          ],
          [
            13924,
            "Strictness and warnings"
          ],
          [
            13925,
            "Strictness and warnings"
          ],
          [
            13965,
            "Strictness and warnings"
          ],
          [
            13966,
            "Strictness and warnings"
          ],
          [
            14221,
            "Backwards compatibility"
          ],
          [
            14222,
            "Backwards compatibility"
          ],
          [
            14262,
            "Backwards compatibility"
          ],
          [
            14263,
            "Backwards compatibility"
          ],
          [
            14306,
            "stable"
          ],
          [
            14307,
            "stable"
          ],
          [
            14439,
            "Error handling and messages"
          ],
          [
            14440,
            "Error handling and messages"
          ],
          [
            14484,
            "Error handling and messages"
          ],
          [
            14485,
            "Error handling and messages"
          ],
          [
            14678,
            "errstr\\*(C'\\fR is a common name used by\nDBI and other popular modules; if you choose something else, be sure to\ndocument it clea"
          ],
          [
            14679,
            "errstr"
          ],
          [
            14687,
            "(C"
          ],
          [
            14692,
            "R is a common name used by\nDBI and other popular modules; if you choose something else, be sure to\ndocument it clearly).\n.IP "
          ],
          [
            14819,
            "bu 4\n"
          ],
          [
            14828,
            "(CWwarn()"
          ],
          [
            14839,
            "R or "
          ],
          [
            14846,
            "(CWcarp()"
          ],
          [
            14857,
            "R a message to STDERR.\n.IP "
          ],
          [
            14886,
            "bu 4\n"
          ],
          [
            14895,
            "(CWcroak()"
          ],
          [
            14907,
            "R only when your module absolutely cannot figure out what to\ndo.  ("
          ],
          [
            14976,
            "(CWcroak()"
          ],
          [
            14988,
            "R is a better version of "
          ],
          [
            15015,
            "(CWdie()"
          ],
          [
            15025,
            "R for use within \nmodules, which reports its errors from the perspective of the caller.  \nSee Carp for details of "
          ],
          [
            15141,
            "(CWcroak()"
          ],
          [
            15153,
            "R, "
          ],
          [
            15158,
            "(CWcarp()"
          ],
          [
            15169,
            "R and other useful\nroutines.)\n.IP "
          ],
          [
            15205,
            "bu 4\nAs an alternative to the above, you may prefer to throw exceptions using \nthe Error module.\n.PP\nConfigurable error handling"
          ],
          [
            15512,
            "handling\nroutine, or other such features.  Be sure to default all these options\nto the commonest use.\n.SH \"DOCUMENTING YOUR MODU"
          ],
          [
            15798,
            "(Aqs \"plain old documentation\" (POD) for your general \ntechnical documentation, though you may wish to write additional\ndocument"
          ],
          [
            16035,
            "bu 4\nA synopsis of the common uses of the module\n.IP "
          ],
          [
            16090,
            "bu 4\nThe purpose, scope and target applications of your module\n.IP "
          ],
          [
            16159,
            "bu 4\nUse of each publicly accessible method or subroutine, including\nparameters and return values\n.IP "
          ],
          [
            16263,
            "bu 4\nExamples of use\n.IP "
          ],
          [
            16290,
            "bu 4\nSources of further information\n.IP "
          ],
          [
            16332,
            "bu 4\nA contact email address for the author/maintainer\n.PP\nThe level of detail in Perl module documentation generally goes from\n"
          ],
          [
            16784,
            "(Aqs routines or methods,\nlengthy code examples, or other in"
          ],
          [
            16846,
            "depth material should be given in \nsubsequent sections.\n.PP\nIdeally, someone who"
          ],
          [
            16928,
            "(Aqs slightly familiar with your module should be able\nto refresh their memory without hitting \"page down\".  As your reader\ncont"
          ],
          [
            17226,
            "bu 4\nNAME\n.IP "
          ],
          [
            17242,
            "bu 4\nSYNOPSIS\n.IP "
          ],
          [
            17262,
            "bu 4\nDESCRIPTION\n.IP "
          ],
          [
            17285,
            "bu 4\nOne or more sections or subsections giving greater detail of available \nmethods and routines and any other relevant informa"
          ],
          [
            17425,
            "bu 4\nBUGS/CAVEATS/etc\n.IP "
          ],
          [
            17453,
            "bu 4\nAUTHOR\n.IP "
          ],
          [
            17471,
            "bu 4\nSEE ALSO\n.IP "
          ],
          [
            17491,
            "bu 4\nCOPYRIGHT and LICENSE\n.PP\nKeep your documentation near the code it documents (\"inline\"\ndocumentation).  Include POD for a g"
          ],
          [
            17657,
            "(Aqs subroutine.  This makes it easier to keep the documentation up\nto date, and avoids having to document each piece of code tw"
          ],
          [
            18752,
            "visible changes to your module, in terms\nrelevant to the user.\n.PP\nUnless you have good reasons for using some other format\n(for"
          ],
          [
            18974,
            "(CW"
          ],
          [
            18979,
            "(C"
          ],
          [
            18996,
            "R,"
          ],
          [
            20398,
            "1.12_01"
          ],
          [
            20399,
            "1.12_01"
          ],
          [
            20590,
            "use Module 0.002"
          ],
          [
            20591,
            "use Module 0.002"
          ],
          [
            21343,
            "downstream"
          ],
          [
            21344,
            "downstream"
          ],
          [
            21651,
            "Pre-requisites"
          ],
          [
            21652,
            "Pre-requisites"
          ],
          [
            22215,
            "require 5.6.1\\*(C'\\fR or similar.  See the documentation on\n\\\u0026\\f(CW\\*(C"
          ],
          [
            22216,
            "require 5.6.1"
          ],
          [
            22231,
            "(C"
          ],
          [
            22236,
            "R or similar.  See the documentation on\n"
          ],
          [
            22280,
            "(CW"
          ],
          [
            22285,
            "(C"
          ],
          [
            22306,
            "R for details."
          ],
          [
            22414,
            "make disttest"
          ],
          [
            22415,
            "make disttest"
          ],
          [
            22512,
            "make test"
          ],
          [
            22513,
            "make test"
          ],
          [
            22573,
            "make test\\*(C'\\fR equivalent \\f(CW\\*(C"
          ],
          [
            22574,
            "make test"
          ],
          [
            22585,
            "(C"
          ],
          [
            22590,
            "R equivalent "
          ],
          [
            22605,
            "(CW"
          ],
          [
            22610,
            "(C"
          ],
          [
            22635,
            "R."
          ],
          [
            23126,
            "Packaging"
          ],
          [
            23127,
            "Packaging"
          ],
          [
            23416,
            "make dist"
          ],
          [
            23417,
            "make dist"
          ],
          [
            24013,
            "COMMON PITFALLS"
          ],
          [
            24014,
            "COMMON PITFALLS"
          ],
          [
            24042,
            "COMMON PITFALLS"
          ],
          [
            24043,
            "COMMON PITFALLS"
          ],
          [
            24064,
            "Reinventing the wheel"
          ],
          [
            24065,
            "Reinventing the wheel"
          ],
          [
            24103,
            "Reinventing the wheel"
          ],
          [
            24104,
            "Reinventing the wheel"
          ]
        ],
        "sz": 26300,
        "ts": [
          {
            "c": 1.0,
            "d": "Make install clean command",
            "e": [
              "make install"
            ],
            "i": "objectives/impact/wipe/disk/mass-delete::make-install-clean-command",
            "l": 1
          },
          {
            "c": 0.699999988079071,
            "d": "before() hook",
            "e": [
              "before"
            ],
            "i": "metadata/package/testing/scripted::mocha-before",
            "l": 2
          },
          {
            "a": "T1027",
            "c": 0.8999999761581421,
            "d": "Low string density base64 context",
            "e": [
              "text.string_density = 0.45"
            ],
            "i": "objectives/anti-static/obfuscation/code-metrics::js-base64-candidate-low-string-density",
            "l": 1,
            "m": "B0032"
          },
          {
            "c": 0.8999999761581421,
            "d": "File has 30 or more lines",
            "e": [
              "text.total_lines = 671.00"
            ],
            "i": "metadata/package/metrics::file-has-30-plus-lines",
            "l": 1
          },
          {
            "c": 0.699999988079071,
            "d": "Package references CHANGELOG",
            "e": [
              "changelog"
            ],
            "i": "metadata/package/documentation::references-changelog-1",
            "l": 2
          },
          {
            "c": 0.949999988079071,
            "d": "Roff heading prose macros",
            "e": [
              ".PP"
            ],
            "i": "metadata/file/text::roff-heading-macros",
            "l": 1
          },
          {
            "c": 1.0,
            "d": "Path-like string pattern",
            "e": [
              "x:\\\\$1\\t\\\\n%\\t\"\\\\$2\""
            ],
            "i": "micro-behaviors/data/text/malware::path-like-pattern",
            "l": 2
          },
          {
            "c": 0.6000000238418579,
            "d": "LICENSE file reference",
            "e": [
              "LICENSE"
            ],
            "i": "metadata/package/license::license-upper",
            "l": 2
          },
          {
            "c": 1.0,
            "d": "Package references CHANGES",
            "e": [
              "changes"
            ],
            "i": "metadata/package/documentation::references-changelog-changes",
            "l": 2
          },
          {
            "c": 0.20000000298023224,
            "d": "output keyword",
            "e": [
              "output"
            ],
            "i": "micro-behaviors/data/text/keywords::output",
            "l": 1
          },
          {
            "c": 0.30000001192092896,
            "d": "stderr string reference",
            "e": [
              "\n.    ds C'\n'br\\}\n.\\\"\n.\\\" Escape single quotes in literal strings from groff's Unicode transform.\n.ie \\n(.g .ds Aq \\(aq\n.el     ",
              " If the F register is \u003e0, we'll generate index entries on stderr for\n."
            ],
            "i": "micro-behaviors/process/fd/stdio::stderr-string",
            "l": 2
          },
          {
            "c": 0.699999988079071,
            "d": "GPL license reference",
            "e": [
              "GPL"
            ],
            "i": "metadata/package/license::gpl-word",
            "l": 2
          },
          {
            "c": 1.0,
            "d": "perl string",
            "e": [
              "\n.    ds C'\n'br\\}\n.\\\"\n.\\\" Escape single quotes in literal strings from groff's Unicode transform.\n.ie \\n(.g .ds Aq \\(aq\n.el     ",
              "\n.IX Title \"PERLMODSTYLE 1perl\"\n.TH PERLMODSTYLE 1perl 2026-04-11 \"perl v5.42.2\" \"Perl Programmers Reference Guide\"\n.",
              " way too many mistakes in technical documents.\n.if n .ad l\n.nh\n.SH NAME\nperlmodstyle ",
              " Perl module style guide\n.SH INTRODUCTION\n.IX Header \"INTRODUCTION\"\nThis document attempts to describe the Perl Community",
              "(Aqs \"best practice\"\nfor writing Perl modules.  It extends the recommendations found in \nperlstyle , which should be considered ",
              "(Aqs internals.\n.PP\nThis document differs from perlnewmod in that it is a style guide\nrather than a tutorial on creating CPAN mo",
              "use\\*(C'\\fR\n.IP \\(bu 4\nInclude tests with your module\n.IP \\(bu 4\nChoose a sensible and consistent version numbering scheme (X.YY",
              "bu 4\nChoose a sensible and consistent version numbering scheme (X.YY is the common Perl module numbering scheme)\n.IP ",
              "(Aqs already \nbeen done in Perl, and avoid re",
              "NAME\\*(C'\\fR) is a relic of older versions of Perl in which\nordinary lower case strings were not handled correctly by the \\f(CW\\",
              "R) is a relic of older versions of Perl in which\nordinary lower case strings were not handled correctly by the ",
              "errstr\\*(C'\\fR is a common name used by\nDBI and other popular modules; if you choose something else, be sure to\ndocument it clea",
              "handling\nroutine, or other such features.  Be sure to default all these options\nto the commonest use.\n.SH \"DOCUMENTING YOUR MODU",
              "bu 4\nA contact email address for the author/maintainer\n.PP\nThe level of detail in Perl module documentation generally goes from\n",
              "(Aqs slightly familiar with your module should be able\nto refresh their memory without hitting \"page down\".  As your reader\ncont",
              "(Aqs subroutine.  This makes it easier to keep the documentation up\nto date, and avoids having to document each piece of code tw"
            ],
            "i": "objectives/command-and-control/dropper::perl-str",
            "l": 1
          },
          {
            "c": 0.8600000143051147,
            "d": "Embedded string exceeds 3000 chars",
            "e": [
              "strings.max_length = 4304.00"
            ],
            "i": "objectives/command-and-control/dropper/execution::js-max-string-over-3000",
            "l": 3
          },
          {
            "a": "T1027",
            "c": 0.6000000238418579,
            "d": "No comments in code",
            "e": [
              "comments.total = 0.00"
            ],
            "i": "objectives/anti-static/obfuscation/code-metrics/structure::no-comments",
            "l": 1,
            "m": "B0032"
          },
          {
            "a": "T1027",
            "c": 0.800000011920929,
            "d": "Sequential identifiers (a, b, c,",
            "e": [
              "identifiers.sequential_names = 12.00"
            ],
            "i": "objectives/anti-static/obfuscation/code-metrics/identifiers::sequential-identifiers",
            "l": 2,
            "m": "B0032"
          }
        ],
        "sha": "ed59fb18a90407f97672349e5eb68ff51aa602d1a63c627bf4246d0e4c751b32",
        "path": "perlmodstyle.1perl.gz!!perlmodstyle.1perl",
        "type": "javascript"
      }
    ],
    "tv": "b2c18"
  }
}