#!/usr/bin/perl -w # Translate text template to run-length encoding. # # A-Z = space. # a-z = char. # ! = newline. use strict; sub flush_space($) { my ($count) = @_; if( $$count > 0 ) { print chr(ord("A") + $$count - 1); $$count = 0; } } sub flush_char($) { my ($count) = @_; if( $$count > 0 ) { print chr(ord("a") + $$count - 1); $$count = 0; } } my $space = 0; my $char = 0; while( my $line = <> ) { foreach my $c (unpack "C*", $line) { if( $c == ord(" ") ) { flush_char(\$char); $space++; if( $space >= 26 ) { flush_space(\$space); } } elsif( $c == ord("\n") ) { flush_space(\$space); flush_char(\$char); print "!"; } else { flush_space(\$space); $char++; if( $char >= 26 ) { flush_char(\$char); } } } } flush_space(\$space); flush_char(\$char); print "\n";