I'd like to carry on the tradition of sharing some of these before they are lost, even though they are about as trivial as you can get.
Eval
Here's one that I picked up at the University of Oslo 10-15 years ago, which I still use, just out of habit. The file is traditionally named
Eval
, and I believe this particular version was concocted by Kjetil T. Homme (who has some other nice hacks, BTW). The idea is to have an easy-to-use command line calculator:#! /bin/sh -So what's the point?
exec perl -e '$a = ('"$*"');
if ($a == int($a)) {
print $a, "\n";
} else {
printf ("%.3f\n", $a);
}'
For me, it's the ease of use, and not least the ease of installability. All I need is a Perl version that understands a very simple set of commands. I don't have to worry whether
bc
or dc
is installed, I don't have to open a GUI, and I can work with fairly advanced expressions. They just have end up as valid Perl.7
Did you ever forget exactly which octal code to use for the ASCII letter 'h', or the hex number for the backtick (`) character?
7
to the rescue!#! /usr/bin/perl -CAnd if you still haven't made the transition to Unicode/UTF-8, printing the printables in e.g. a Latin character set may still be interesting; create a copy of the file called
for (32..126) {
printf "%3d 0x%02X 0%03o 0b%08b %c\n", ($_)x5;
}
8
, which works on the range 160..255 instead. Or be fancy with basename checking and all that. :)Answer
When I write scripts that do potentially Dangerous Stuff on production servers (that happens way too often), I usually like to include some code that tells the user to think a bit before continuing. That is, I don't want all scripts to be fire-and-forget. This is another classical piece of code, which I've massaged for my own needs (and perhaps your needs as well?):
print "About to run $code.\n\n";
print "Are you sure? (y/N): ";
my $answer = <STDIN>;
chop $answer;
if ($answer !~ /^y(es)?$/i) {
die "Okay, aborting.\n";
} else {
print "Okay, continuing!\n";
}