aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbin/uri69
-rw-r--r--etc/guix/home.scm1
2 files changed, 70 insertions, 0 deletions
diff --git a/bin/uri b/bin/uri
new file mode 100755
index 0000000..5930c39
--- /dev/null
+++ b/bin/uri
@@ -0,0 +1,69 @@
+#!/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;
+Getopt::Std::getopts('edh', \%opts);
+
+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(<STDIN>);
+} else {
+ print URI::Escape::uri_escape(<STDIN>);
+}
diff --git a/etc/guix/home.scm b/etc/guix/home.scm
index cc79b1a..ddf1266 100644
--- a/etc/guix/home.scm
+++ b/etc/guix/home.scm
@@ -332,6 +332,7 @@
perl-regexp-grammars
perl-commonmark
perl-aliased
+ perl-uri-escape
ruby
python
python-slixmpp