Die meisten machen es mittlerweile so, dass sie nur ein kleines Skript bereitstellen, dass dann ein Modul benutzt. Das hat den Vorteil, dass die Funktionalität nicht nur im Skript zur Verfügung steht, sondern auch für die Verwendung in anderen Skripten/Module verwendet werden kann.
Den Namensraum App:: finde ich nur dann gut, wenn die Funktionalität "nur für das Skript" interessant ist. Ansonsten mache ich das wie bisher. Z.B.
https://github.com/reneeb/OTRS-OPM-Maker
Unter bin/ gibt es das Skript opmbuild (
https://github.com/reneeb/OTRS-OPM-Maker/blob/mast...) in dem kaum Code steht.
Wenn Du unter bin/ speicherst und Dist::Zilla verwendest, musst Du gar nichts besonderes machen. Das kümmert sich darum das Makefile.PL so zu schreiben, dass das Skript dann in einen Pfad geschrieben wird das in $PATH is.
Im Makefile.PL sieht das dann so aus:
"EXE_FILES" => [
"bin/opmbuild"
],