#!/usr/local/bin/perl sub make_tr { my($search, $replace, $flags) = @_; $flags = '' if not defined $flags; my $code = "sub { \$_[0] =~ tr/$search/$replace/$flags }"; my $sub = eval $code; die "$code\n$@" if $@; return $sub; } my $rotate = shift; $rotate = 13 unless defined $rotate and $rotate =~ /^\d+\z/; $rotate %= 26; $replace = chr(ord('A')+$rotate) . '-ZA-' . chr(ord('A')+$rotate-1); $replace .= lc($replace); my $rotate_sub = make_tr('A-Za-z', $replace, ''); while (<>) { $rotate_sub->($_); print; }