NAME
    Map::Tube::Text::Shortest - Shortest route information via Map::Tube
    object.

SYNOPSIS
     use Map::Tube::Test::Shortest;

     my $obj = Map::Tube::Text::Shortest->new(%params);
     print $obj->print($from, $to);

METHODS
  "new"
     my $obj = Map::Tube::Text::Shortest->new(%params);

    Constructor.

    *       "tube"

            Map::Tube object.

            Parameter is required.

            Default value is undef.

    Returns instance of object.

  "print"
     print $obj->print($from, $to);

    Print shortest route table.

    Returns string with table.

ERRORS
     new():
             Parameter 'tube' is required.
             Parameter 'tube' must be 'Map::Tube' object.

EXAMPLE
     use strict;
     use warnings;

     use English;
     use Encode qw(decode_utf8 encode_utf8);
     use Error::Pure qw(err);
     use Map::Tube::Text::Shortest;

     # Arguments.
     if (@ARGV < 3) {
             print STDERR "Usage: $0 metro from to\n";
             exit 1;
     }
     my $metro = $ARGV[0];
     my $from = decode_utf8($ARGV[1]);
     my $to = decode_utf8($ARGV[2]);

     # Load metro object.
     my $class = 'Map::Tube::'.$metro;
     eval "require $class;";
     if ($EVAL_ERROR) {
             err "Cannot load '$class' class.",
                     'Error', $EVAL_ERROR;
     }

     # Metro object. 
     my $tube = eval "$class->new";
     if ($EVAL_ERROR) {
             err "Cannot create object for '$class' class.",
                     'Error', $EVAL_ERROR;
     }

     # Table object.
     my $table = Map::Tube::Text::Shortest->new(
             'tube' => $tube,
     );
 
     # Print out.
     print encode_utf8(scalar $table->print($from, $to))."\n";

     # Output without arguments like:
     # Usage: /tmp/O0s_2qtAuB metro from to

     # Output with 'Budapest', 'Fővám tér', 'Opera' arguments like:
     # 
     # From Fővám tér to Opera
     # =======================
     # 
     # -- Route 1 (cost ?) ----------
     # [   M4 ] Fővám tér
     # [   M3 ] Kálvin tér
     # [ * M4 ] Kálvin tér
     # [   M3 ] Ferenciek tere
     # [   M1 ] Deák Ferenc tér
     # [ * M2 ] Deák Ferenc tér
     # [   M3 ] Deák Ferenc tér
     # [   M1 ] Bajcsy-Zsilinszky út
     # [   M1 ] Opera
     # 
     # M1  Linia M1
     # M3  Linia M3
     # M2  Linia M2
     # M4  Linia M4
     # 
     # *: Transfer to other line
     # +: Transfer to other station
     #

DEPENDENCIES
    Class::Utils, Error::Pure, List::Util, Readonly, Scalar::Util.

SEE ALSO
    Task::Map::Tube
        Install the Map::Tube modules.

    Task::Map::Tube::Metro
        Install the Map::Tube concrete metro modules.

REPOSITORY
    <https://github.com/michal-josef-spacek/Map-Tube-Text-Shortest>

AUTHOR
    Michal Josef Špaček <mailto:skim@cpan.org>

    <http://skim.cz>

LICENSE AND COPYRIGHT
    © 2014-2023 Michal Josef Špaček

    Artistic License

    BSD 2-Clause License

VERSION
    0.02