1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- #!/usr/bin/perl
- # Daniel "Trizen" Șuteu
- # License: GPLv3
- # Date: 25 July 2012
- # https://github.com/trizen
- # A simple ASCII encoder-decoder.
- # What's special is that you can delete words from the encoded text, and still be able to decode it.
- # You can also insert or append encoded words to an encoded string and decode it later.
- use 5.010;
- use strict;
- use warnings;
- sub encode_decode ($$) {
- my ($encode, $text) = @_;
- my $i = 1;
- my $output = '';
- LOOP_1: foreach my $c (map { ord } split //, $text) {
- foreach my $o ([32, 121]) {
- if ($c > $o->[0] && $c <= $o->[1]) {
- my $ord =
- $encode
- ? $c + ($i % 2 ? $i : -$i)
- : $c - ($i % 2 ? $i : -$i);
- if ($ord > $o->[1]) {
- $ord = $o->[0] + ($ord - $o->[1]);
- }
- elsif ($ord <= $o->[0]) {
- $ord = $o->[1] - ($o->[0] - $ord);
- }
- $output .= chr $ord;
- ++$i;
- next LOOP_1;
- }
- }
- $output .= chr($c);
- $i = 1;
- }
- return $output;
- }
- my $enc = encode_decode(1, "test");
- my $dec = encode_decode(0, $enc);
- say "Enc: ", $enc;
- say "Dec: ", $dec;
- # Encoding
- my $encoded = encode_decode(1, "Just another ")
- . encode_decode(1, "Perl hacker,");
- # Decoding
- my $decoded = encode_decode(0, $encoded);
- say $encoded;
- say $decoded;
|