Command line parsing


This page is not about AXP (that is an extensible multi-purpose tool for GNU Arch), but about parsing of its commands and options.

The axp executable is a command line utility written in perl with a number of nice features:

Other interesting facts about axp:

  • The "plug-in" command system works as following. On command "axp triggers add", exactly 3 classes are loaded, AXP::Command::triggers::add, AXP::Command::triggers and AXP::Command (actually in reverse). Obviously, all logic related to "adding a trigger" is implemented in the deepest class. All functionality common to trigger commands, aka "loading/saving any trigger by name or by index" is implemented in its parent class (AXP::Command::triggers). And all functionality common to all commands, like auto-help, is implemented in the super class (AXP::Command).

    Now, you know how to add a new hypothetical subcommand "axp triggers dump" without changing any existing file. See an example.

    And how does axp ensure correct parsing of "axp registry find migo"? Well, there is a subdirectory for each composite command, i.e. registry/, but not registry/find/ (just registry/, so it knows to stop here.

  • To improve the user usability, all subcommands on "axp tree" level are also exposed to the top level, i.e. axp fork is the same as axp tree fork.
  • axp may interactively show the man pages of its own classes (that includes AXP and Arch namespaces), using "axp man Arch::Tree". This is a bit different from invoking "man" on the globally installed man pages of perl modules, since axp may work directly from the released or development tree without installation.
  • The utility consists of a short executable and accompanying perl modules, however by issuing "axp self join", it may convert itself into a self-containing single executable with no feature loss. Well, it may convert other similar utilities, like archzoom.cgi and archway too. :)