Complete::Path - Complete path


This document describes version 0.251 of Complete::Path (from Perl distribution Complete-Path), released on 2021-02-02.





 complete_path(%args) -> array

Complete path.

Complete path, for anything path-like. Meant to be used as backend for other functions like Complete::File::complete_file or Complete::Module::complete_module. Provides features like case-insensitive matching, expanding intermediate paths, and case mapping.

Algorithm is to split path into path elements, then list items (using the supplied list_func) and perform filtering (using the supplied filter_func) at every level.

This function is not exported by default, but exportable.

Arguments ('*' denotes required arguments):

  • exclude_dir => bool

  • exclude_leaf => bool

  • filter_func => code

    Provide extra filtering. Code will be given path and should return 1 if the item should be included in the final result or 0 if the item should be excluded.

  • is_dir_func => code

    Function to check whether a path is a "dir".

    Optional. You can provide this function to determine if an item is a "directory" (so its name can be suffixed with path separator). You do not need to do this if you already suffix names of "directories" with path separator in list_func.

    One reason you might want to provide this and not mark "directories" in list_func is when you want to do extra filtering with filter_func. Sometimes you do not want to suffix the names first (example: see complete_file in Complete::File).

  • list_func* => code

    Function to list the content of intermediate "dirs".

    Code will be called with arguments: ($path, $cur_path_elem, $is_intermediate). Code should return an arrayref containing list of elements. "Directories" can be marked by ending the name with the path separator (see path_sep). Or, you can also provide an is_dir_func function that will be consulted after filtering. If an item is a "directory" then its name will be suffixed with a path separator by complete_path().

  • path_sep => str (default: "/")

  • recurse => bool

  • recurse_matching => str (default: "level-by-level")

  • starting_path* => str (default: "")

  • word* => str (default: "")

    Word to complete.

Return value: (array)



If set to true, will produce more log statements for debugging.


Please visit the project's homepage at


Source repository is at


Please report any bugs or feature requests on the bugtracker website

When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.




perlancar <>


This software is copyright (c) 2021, 2017, 2016, 2015, 2014 by

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