#!/usr/bin/env perl use strict; use warnings; use 5.018; our $VERSION = '0.00'; use Getopt::Long qw(:config no_ignore_case); use List::Util qw(max); use Travel::Status::DE::IRIS; use Travel::Status::DE::IRIS::Stations; my %train_type; my ( $date, $time ); my $arrivals = 0; my $filter_via; my $ignore_late = 0; my $show_full_route = 0; my $types = q{}; my $language; my @output; binmode( STDOUT, ':encoding(utf-8)' ); GetOptions( 'a|arrivals' => \$arrivals, 'd|date=s' => \$date, 'f|full-route' => \$show_full_route, 'h|help' => sub { show_help(0) }, 'l|lang=s' => \$language, 'L|ignore-late' => \$ignore_late, 'm|mot=s' => \$types, 't|time=s' => \$time, 'v|via=s' => \$filter_via, 'V|version' => \&show_version, ) or show_help(1); if ( @ARGV != 1 ) { show_help(1); } my ($station) = @ARGV; $station = get_station($station); for my $type ( split( qr{,}, $types ) ) { if ( substr( $type, 0, 1 ) eq q{!} ) { $train_type{ substr( $type, 1 ) } = 0; } else { $train_type{$type} = 1; } } my $status = Travel::Status::DE::IRIS->new( date => $date, language => $language, mot => \%train_type, station => $station, time => $time, mode => $arrivals ? 'arr' : 'dep', ); sub get_station { my ($input_name) = @_; my @stations = Travel::Status::DE::IRIS::Stations::get_station_by_name($input_name); if ( @stations == 0 ) { say STDERR "No station matches '$input_name'"; } elsif ( @stations == 1 ) { return $stations[0][0]; } else { say STDERR "The input '$input_name' is ambiguous. Please choose one " . 'of the following:'; say STDERR join( "\n", map { $_->[1] } @stations ); exit(1); } } sub show_help { my ($code) = @_; print 'Usage: db-ris [-d ] [-m ] [-t