use strict; use warnings; use 5.010; use Text::Banner; my @current; my @letters; while (<>) { chomp; push @current, $_; if (@current == 8) { push @letters, fingerprint(@current); @current = (); } } use Data::Dumper; sub chunk_transpose { my @r; for (@_) { my @c = split //; for my $c (0..$#c) { $r[$c] .= $c[$c]; } } return @r; } sub fingerprint { my @a = chunk_transpose(@_); my @f; while (@a) { my $f = ''; for (1..8) { $f .= shift @a; } if ($f =~ /\S/) { $f =~ s/^\s+//; $f =~ s/\s+$//; } else { $f = ' '; } push @f, $f; } wantarray ? @f : $f[0]; } my %table; my $b = Text::Banner->new; for (0..126) { $b->set(chr); $b->fill('#'); my $f = (fingerprint split /\n/, $b->get)[0]; $table{$f} = chr if defined $f; } no warnings; say join '', @table{@letters}; #### $ perl banner.pl | perl unbanner.pl st anotherl hacke