#!/usr/bin/env perl use warnings; use strict; use URI; use URI::QueryParam; use feature 'say'; die "Usage: $0 COMMAND [URIs]" unless @ARGV >= 1; my $command = shift; sub make_uri { my $uri = shift; my @opts = map { s/^--//; [split /=/, $_, 2] } @ARGV; for (@opts) { my ($k, $v) = @$_; if ($k =~ /^query-param-(.+)$/) { $uri->query_param($1 => $v); } else { $uri->$k($v); } } say $uri->as_string; } sub take_it { chomp; my $uri = URI->new($_); die "Invalid command for $_: $command" unless $uri->can($command); my $val = $uri->$command; if (defined $val) { exit !$val if $val =~ /^[01]$/; say $val; } else { say "undefined"; exit 1; } } if ($command eq 'create') { make_uri(URI->new); } elsif ($command eq 'change') { make_uri(URI->new($_)) while ; } else { if (@ARGV) { take_it for @ARGV; } else { take_it while ; } }