#!/usr/bin/env perl use v5.34; use strict; use warnings; use feature 'signatures'; no warnings 'experimental'; use Getopt::Std (); use URI::Escape (); sub usage($fh) { print $fh <<~'EOF' Usage: uri [-e|-d] uri -h EOF } sub help($fh) { print $fh <<~'EOF' Options: -e encode the string (the default action) -d decode the string -h, --help show this message Get a string from STDIN and convert it to/from URL encoding. Examples: Encode the URL: $ echo 'https://euandre.org' | uri Decode the content from the file: $ uri -d < file EOF } for (@ARGV) { last if $_ eq '--'; if ($_ eq '--help') { usage *STDOUT; help *STDOUT; exit; } } my %opts; if (!Getopt::Std::getopts('edh', \%opts)) { usage *STDERR; exit 2; } if ($opts{h}) { usage *STDOUT; help *STDOUT; exit; } elsif ($opts{e} and $opts{d}) { say STDERR 'Both -e and -d given. Pick one.'; say STDERR ''; usage *STDERR; exit 2; } elsif ($opts{d}) { print URI::Escape::uri_unescape(); } else { print URI::Escape::uri_escape(); }