Text::FindIndent - Heuristically determine the indent style

      use Text::FindIndent;
      my $indentation_type = Text::FindIndent->parse($text);
      if ($indentation_type =~ /^s(\d+)/) {
        print "Indentation with $1 spaces\n";
      elsif ($indentation_type =~ /^t(\d+)/) {
        print "Indentation with tabs, a tab should indent by $1 characters\n";
      elsif ($indentation_type =~ /^m(\d+)/) {
        print "Indentation with $1 characters in tab/space mixed mode\n";
      else {
        print "Indentation style unknown\n";

    This is an experimental distribution that attempts to intuit the
    underlying indent "policy" for a text file (most likely a source code

    The class method "parse" tries to determine the indentation style of the
    given piece of text (which must start at a new line and can be passed in
    either as a string or as a reference to a scalar containing the string).

    Returns a letter followed by a number. If the letter is "s", then the
    text is most likely indented with spaces. The number indicates the
    number of spaces used for indentation. A "t" indicates tabs. The number
    after the "t" indicates the number characters each level of indentation
    corresponds to. A "u" indicates that the indenation style could not be
    determined. Finally, an "m" followed by a number means that this many
    characters are used for each indentation level, but the indentation is
    an arbitrary number of tabs followed by 0-7 spaces. This can happen if
    your editor is stupid enough to do smart indentation/whitespace
    compression. (I.e. replaces all indentations many tabs as possible but
    leaves the rest as spaces.)

    The function supports parsing of "vim" *modelines*. Those settings
    override the heuristics. The modeline's options that are recognized are
    "sts"/"softtabstob", "et"/"noet"/"expandtabs"/"noexpandtabs", and

    Similarly, parsing of "emacs" *Local Variables* is somewhat supported.
    "parse" use explicit settings to override the heuristics but uses style
    settings only as a fallback. The following options are recognized:
    "tab-width", "indent-tabs-mode", "c-basic-offset", and "style".

    Bugs should be reported via the CPAN bug tracker at


    For other issues, contact the author.

    Adam Kennedy <>, Steffen Mueller <>

    Copyright 2008 Adam Kennedy,

    Copyright 2008 Steffen Mueller.

    This program is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself.

    The full text of the license can be found in the LICENSE file included
    with this module.