#!/usr/bin/perl

# $tekst_rot = rot13( $tekst )
#
sub rot13 {
    my $wartosc = shift;
    $wartosc =~ tr/a-zA-Z/n-za-mN-ZA-M/;
    return $wartosc;
}

# $kod = cezar( $tekst, $klucz )
# $tekst = cezar( $kod, 26-$klucz )
#
sub cezar {
    my $tekst = shift;
    my $klucz = shift;

    # klucz 0 nie robi nic
    my $ks = $klucz % 26 or return $tekst;
    my $ke = $ks - 1;

    my ($s, $S, $e, $E );
    $s = chr(ord('a') + $ks);
    $S = chr(ord('A') + $ks);
    $e = chr(ord('a') + $ke);
    $E = chr(ord('A') + $ke);
    eval "\$tekst =~ tr/a-zA-Z/$s-za-$e$S-za-$E/;";

    return $tekst;
}

$wiadomosc = "the quick brown fox caught mosquito-borne encephalitis.";

$kod = cezar( $wiadomosc, 5 );
$wiad = cezar( $kod, 21 );          # ciag identyczny jak poczatkowa $wiadomosc

print $wiad, "\n";

$rotA = rot13( $wiadomosc );
$rotB = cezar( $wiadomosc, 13 );     # ta sama wartosc co $rotA
$wiad = rot13( $rotA );              # znowu poczatkowa wartosc $wiadomosc

print $wiad, "\n";
