-
Notifications
You must be signed in to change notification settings - Fork 34
/
Copy pathascii_encode_decode.pl
executable file
·63 lines (48 loc) · 1.42 KB
/
ascii_encode_decode.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/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;