NAME App::Yath::Script - Script initialization and utility functions for Test2::Harness SYNOPSIS The yath script uses this module as its entry point: #!/usr/bin/perl use strict; use warnings; BEGIN { return if $^C; require App::Yath::Script; App::Yath::Script::do_begin(); } exit(App::Yath::Script::do_runtime()); DESCRIPTION This module provides the initial entry point for the yath script. It handles script discovery, configuration loading, version detection, and delegation to version-specific script modules (App::Yath::Script::V{X}). During the BEGIN phase, do_begin() locates .yath.rc and .yath.user.rc configuration files, determines the harness version to use, and delegates to the appropriate App::Yath::Script::V{X} module. At runtime, do_runtime() hands off execution to that module. Version Detection When no configuration file is found, the latest installed App::Yath::Script::V{X} module is used automatically (V0 is excluded from auto-detection since it is reserved for script validation). The version is determined by the configuration filename using the following priority (highest first) in each directory searched: 1. A .yath.rc symlink whose target filename matches .yath.v#.rc -- the version is extracted from the target name. This lets projects keep a stable .yath.rc name while pointing at the versioned file. 2. An explicitly versioned file .yath.v#.rc (e.g. .yath.v2.rc). 3. A plain .yath.rc (not a symlink to a versioned file) -- defaults to 1 for backwards compatibility with existing Test2::Harness projects. The same priority applies to user-level configuration (.yath.user.rc / .yath.user.v#.rc). If both project-level and user-level configuration files specify a version, the user-level version takes precedence. This allows individual developers to override the project-level version when needed. PRIMARY API These are the main entry points used by the yath script: do_begin() Called during BEGIN. Discovers the script path, injects include paths, seeds PERL_HASH_SEED for reproducibility, loads .yath.rc / .yath.user.rc configuration files, determines the harness version, and delegates to App::Yath::Script::V{X}->do_begin(...). $exit = do_runtime() Called after BEGIN. Delegates to App::Yath::Script::V{X}->do_runtime() and returns the exit code. EXPORTS All exports are optional (via Importer). $script_file = script() Returns the path to the currently executing script file. $yath_module = module() Returns the name of the currently loaded App::Yath::Script::V{X} module. do_exec(\@argv) Re-executes the current script with the given arguments. Sets the T2_HARNESS_INCLUDES environment variable to preserve the current @INC. $clean_path = clean_path($path) $clean_path = clean_path($path, $absolute) Converts a path to an absolute, normalized form. By default resolves symbolic links using realpath. Pass a false second argument to skip realpath resolution. $full_path = find_in_updir($file) Searches for a file starting from the current directory and moving up through parent directories until found. Returns the full path to the file or undef if not found. $file = mod2file($mod) Converts a module name (e.g., App::Yath::Script) to a file path (e.g., App/Yath/Script.pm). SOURCE The source code repository for Test2-Harness can be found at http://github.com/Test-More/Test2-Harness/. MAINTAINERS Chad Granum AUTHORS Chad Granum COPYRIGHT Copyright Chad Granum . This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See http://dev.perl.org/licenses/