Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

ASCII art from sourcecode as image

50 views
Skip to first unread message

Erik Itter

unread,
Jul 15, 2003, 3:52:57 PM7/15/03
to
I have seen both linux source codes and some scripts for my company rendered
as images - reads formated with extra blanks line feeds etc. to look like
some image if displayed using small enough letters. (without
inserting/deleting anything changing the source from the compilers point of
view)

I am sure there has to be some converter to do that source2asciiArt
conversion using a given image as formating mask but i cannot find such a
tool. Where are they???

plz help

erik


Arthur J. O'Dwyer

unread,
Jul 15, 2003, 5:05:21 PM7/15/03
to

Not only do you have to know the "formatting mask", you also have to know
the formatting rules of the language you're using. For example, in C and
C++ you can't add whitespace in the middle of an identifier, or in the
middle of a multi-character operator like -> or ++. A program would have
to have a list of "atomic symbols" like '++' and 'if' that could *never*
be changed, and probably a list of "identifiers" like 'count' and 'foobaz'
that *could* be changed, as long as they were changed everywhere. Ditto
rules about comments (both single-line and delimited varieties).

It would be a nice programming exercise to write a very simple "formatter"
in this vein; you might even try it yourself, if you know a programming
language. To create a generic "formatter" taking into consideration
everything I said above: that would be really challenging, IMO.

-Arthur

ObAscii: terribly un-ergonomic monitor-keyboard setup

_/\
_- \\
--\ \\-----. /-_
\ _\\ _ `. / -_
\.-'\ -~-\#c_ `. /
~~~~~~ ~~~~ `. /
`.

Faux_Pseudo

unread,
Jul 15, 2003, 5:14:05 PM7/15/03
to
_.--- Erik Itter spoke in alt.ascii-art --------._
> I have seen both linux source codes and some scripts for my company rendered
> as images - reads formated with extra blanks line feeds etc.

You might want to have a look at <url:http://www.ioccc.org/>
It may take a little while but you will find some nice ones like this:
<url:http://www0.us.ioccc.org/2001/williams.c>

> I am sure there has to be some converter to do that source2asciiArt
> conversion

Not that I am aware of. Last I checked it is all done by hand.

'---...____ Faux_Pseudo ________________...---~~~

--
ICQ=66618055 : http://asciipr0n.com/fp UPDATED=05/06
YIM=faux_pseudo : Rev: 2/anthrax/killer_as/02_-_Only.mp3
These 34 bytes : Now: /01_-_bud_e._luvbomb_and_satan's_lounge_band.mp3
Are up for sale : Fwd: de_-_walking_in_london_-_06_-_city_screaming.mp3

Harry Mason

unread,
Jul 16, 2003, 4:07:44 AM7/16/03
to
Erik Itter wrote:
> I have seen both linux source codes and some scripts for my company rendered
> as images - reads formated with extra blanks line feeds etc. to look like
> some image if displayed using small enough letters. (without
> inserting/deleting anything changing the source from the compilers point of
> view)

For perl there is Acme::EyeDrops. It doesn't just format the program, it
obfuscates it too.

-- 8< -- cut here -- >8 --
#!/usr/bin/perl -w
eval eval '"'.


('#').
'!'.'/' .('['
^'.' ) .('['^'('). ("\["^
')')."\/".( '`'|'"').('`'| ')').(
'`'|'.') .'/'. ( '['^'+').('`'|'%').('['
^')').('`'|',').('{' ^'[').'-'.('['^',').('!'
^'+').('['^'.').('['^ '(').('`'|'%').('{'^('[')).(
'['^'(').('['^'/').( '['^')').('`'|')').('`'|'#').("\["^
('/')). ';'.('!'^'+').('['^'+').('['^"\)").(
'`'|')').('`'|'.').('['^'/').('{'^'[').'\\'.'"'.('`'|'(').(
'`'|'%').('`'|',').('`'|',').('`'|'/').','.('{'^'[').('['^','
).('`'|'/').('['^')').('`'|',').('`'|'$').'\\'.'\\'.('`'|"\.").
'\\'.'"'.';'.('!'^'+').'"';$:='.'^'~';$~='@'|'(';$^=')'^'[';$/=
'`'|'.';$_='('^'}';$,='`'|'!';$\=')'^'}';$:='.'^'~';$~='@'|'(';
$^=')'^'[';$/='`'|'.';$_='('^'}';$,='`'|'!';$\=')'^'}';$:="\."^
'~';$~='@'|'(';$^=')'^'[';$/='`'|'.';$_='('^'}';$,='`'|('!');$\=
')'^'}';$:='.'^'~';$~='@'|'(';$^=')'^'[';$/='`'|'.';$_='('^'}';
$,='`'|'!';$\=')'^'}';$:='.'^'~';$~='@'|'(';$^=')'^'[' ;($/)=
'`'|'.';$_='('^'}';$,='`'|'!';$\=')'^'}';$:='.'^'~'; ($~)=
'@'|'(';$^=')'^'[';$/='`'|'.';$_='('^'}';$,=('`')| "\!";
$\=')'^'}';$:='.'^'~';$~='@'|'(';$^=')' ^'[';$/= '`'|
(( '.'));$_='('^'}';$,='`'|"\!";$\= ')'^'}'; ($:)
='.'^"\~"; $~='@'|'(' ;$^=')'^ '[';$/= '`'
|('.');$_= '('^'}';$, ='`'|'!' ;$\=')' ^+
"\}";$:= '.'^'~';$~ =('@')| '(';$^
=')'^'[' ;$/=('`')| '.';$_= "\("^
'}';$,= '`'|'!';$\ ="\)"^ '}';$:
=('.')^ "\~";$~= ('@')| "\(";
$^=')' ^"\["; $/='`' |'.';
($_)= ('(')^ '}';$, ='`'|
"\!"; $\=')'^ '}';$: ='.'
^'~'; $~='@'|'(' ;$^=
')'^ "\[";$/= '`'|
'.'; $_=('(')^ '}';
($,) ='`'|'!';$\ =')'^
"\}"; $:='.'^'~';$~= ('@')|
"\("; $^="\)"^ '['; $/='`'|
'.';$_= '('^'}';
$,="\`"| '!';#;
-- 8< -- cut here -- >8 --

--
| Harry Mason | .------------. | .___, |"Whatever you do will be |
| University of | | hjm200 @ | | ___('v')___ | insignificant. However, |
| Southampton | | zepler.net | | `"-\._./-"' | it is vitally important |
| England | '------------' | hjm ^ ^ | that you do it." Gandhi |

Arthur J. O'Dwyer

unread,
Jul 16, 2003, 9:13:32 AM7/16/03
to

On Wed, 16 Jul 2003, Harry Mason wrote:
>
> Erik Itter wrote:
> > I have seen both linux source codes and some scripts for my company rendered
> > as images - reads formated with extra blanks line feeds etc. to look like
> > some image if displayed using small enough letters. (without
> > inserting/deleting anything changing the source from the compilers point of
> > view)
>
> For perl there is Acme::EyeDrops. It doesn't just format the program, it
> obfuscates it too.

> #!/usr/bin/perl -w


> eval eval '"'. ('#').
> '!'.'/' .('['
> ^'.' ) .('['^'('). ("\["^
> ')')."\/".( '`'|'"').('`'| ')').(
> '`'|'.') .'/'. ( '['^'+').('`'|'%').('['
> ^')').('`'|',').('{' ^'[').'-'.('['^',').('!'

<snip most of very nice program>


> "\}"; $:='.'^'~';$~= ('@')|
> "\("; $^="\)"^ '['; $/='`'|
> '.';$_= '('^'}';
> $,="\`"| '!';#;

Very nice!

The OP has told me via e-mail that he really wants Java, of course.
So unfortunately the 'eval big_long_string' trick that I think is
at the root of EyeDrops' approach wouldn't work.

Out of curiosity: Why *two* nested 'eval's at the start of this program?
And what does ('['^'.') mean? 0x5B^0x2E = 0x75 = 'u', or is there some
deeper magic at work here? :)

-Arthur
__ __ _ .
\-' \-_ \<_ \_
--------------

BoD

unread,
Jul 16, 2003, 10:24:26 AM7/16/03
to
my god...

Now I remember why I don't do perl :)

BoD


Harry Mason

unread,
Jul 17, 2003, 12:04:23 PM7/17/03
to
Arthur J. O'Dwyer wrote:
>
> On Wed, 16 Jul 2003, Harry Mason wrote:
>>
>> Erik Itter wrote:
>> > I have seen both linux source codes and some scripts for my company
>> > rendered as images - reads formated with extra blanks line feeds etc. to
>> > look like some image if displayed using small enough letters. (without
>> > inserting/deleting anything changing the source from the compilers point
>> > of view)
>>
>> For perl there is Acme::EyeDrops. It doesn't just format the program, it
>> obfuscates it too.
>
>> #!/usr/bin/perl -w
>> eval eval '"'. ('#').
>> '!'.'/' .('['
><snip most of very nice program>
>
> The OP has told me via e-mail that he really wants Java, of course.
> So unfortunately the 'eval big_long_string' trick that I think is
> at the root of EyeDrops' approach wouldn't work.

Bear in mind that this is actually an obfuscator, not just a reformatter.
You could achieve a similar effect in most languages, including Java, by
creative use of white space, string concatenation, etc.

> Out of curiosity: Why *two* nested 'eval's at the start of this program?

The inner "eval" constructs the text of the original program. You can see this
if you replace the outer "eval" with "print":

#!/usr/bin/perl -w
use strict;
print "hello, world\n";

which is the original source code.

> And what does ('['^'.') mean? 0x5B^0x2E = 0x75 = 'u', or is there some
> deeper magic at work here? :)

('['^'.') corresponds to the "u" in "use strict". Obfuscating is so much more
effective if you don't use any alphanumerics in your source code. :)

Arthur J. O'Dwyer

unread,
Jul 17, 2003, 4:20:29 PM7/17/03
to

On Thu, 17 Jul 2003, Harry Mason wrote:
>
> Arthur J. O'Dwyer wrote:
> > On Wed, 16 Jul 2003, Harry Mason wrote:
> >> #!/usr/bin/perl -w
> >> eval eval '"'. ('#').
> >> '!'.'/' .('['
> ><snip most of very nice program>
> >
> > The OP has told me via e-mail that he really wants Java, of course.
> > So unfortunately the 'eval big_long_string' trick that I think is
> > at the root of EyeDrops' approach wouldn't work.
>
> Bear in mind that this is actually an obfuscator, not just a reformatter.
> You could achieve a similar effect in most languages, including Java, by
> creative use of white space, string concatenation, etc.

Certainly not in C or C++, and not in the vanilla beginner's Java I'm
familiar with. They don't have any equivalent of "eval", unless you
build your own interpreter on top of everything. :)

> > Out of curiosity: Why *two* nested 'eval's at the start of this program?
>
> The inner "eval" constructs the text of the original program. You can see
> this if you replace the outer "eval" with "print":
>
> #!/usr/bin/perl -w
> use strict;
> print "hello, world\n";
>
> which is the original source code.

Aha. [I certainly wouldn't've run that random Perl program on *my*
machine! ;-)]

> > And what does ('['^'.') mean? 0x5B^0x2E = 0x75 = 'u', or is there some
> > deeper magic at work here? :)
>
> ('['^'.') corresponds to the "u" in "use strict". Obfuscating is so much more
> effective if you don't use any alphanumerics in your source code. :)

Yeah - but does Perl specify ASCII? And in a language where x is an
operator, I wasn't sure but that ^ meant something even weirder for
strings...

-Arthur

Harry Mason

unread,
Jul 18, 2003, 4:59:58 AM7/18/03
to
Arthur J. O'Dwyer wrote:
>
> On Thu, 17 Jul 2003, Harry Mason wrote:
>>
>> Arthur J. O'Dwyer wrote:
>> > On Wed, 16 Jul 2003, Harry Mason wrote:
>> >> #!/usr/bin/perl -w
>> >> eval eval '"'. ('#').
>> >> '!'.'/' .('['
>> ><snip most of very nice program>
>> >
>> > The OP has told me via e-mail that he really wants Java, of course.
>> > So unfortunately the 'eval big_long_string' trick that I think is
>> > at the root of EyeDrops' approach wouldn't work.
>>
>> Bear in mind that this is actually an obfuscator, not just a reformatter.
>> You could achieve a similar effect in most languages, including Java, by
>> creative use of white space, string concatenation, etc.
>
> Certainly not in C or C++, and not in the vanilla beginner's Java I'm
> familiar with. They don't have any equivalent of "eval", unless you
> build your own interpreter on top of everything. :)

Even without eval(), you can still rename variables, concatenate strings,
and insert comments.

import
java.io.PrintStream;
public class ASmileyFace {
public static void main(String[]
a) { PrintStream out = System.out ;
out.print( "This" + " is " +
"both a " + "reform"+
"atted J" + "av" + "a prog"+
"ram, an" + "d a sm"+
"i".concat( "ley " + "face. Th"+
"is " + "shows how to " + "f"+
"orm" + "at Jav" + "a "+
"usi" +"n"+
"g whitespace only.")
) ;} }

As for C, I expect you can find some examples at the IOCCC:
http://www.ioccc.org/

>> > And what does ('['^'.') mean? 0x5B^0x2E = 0x75 = 'u', or is there some
>> > deeper magic at work here? :)
>>
>> ('['^'.') corresponds to the "u" in "use strict". Obfuscating is so much more
>> effective if you don't use any alphanumerics in your source code. :)
>
> Yeah - but does Perl specify ASCII? And in a language where x is an
> operator, I wasn't sure but that ^ meant something even weirder for
> strings...

It's just doing bitwise XOR on the ASCII values of each character. See the
section "Bitwise String Operators" in perlop(1). Perl source code is ASCII
unless you add "use utf8;"; then it can be UTF-8 - but doing bitwise
operations on UTF-8 strings will no doubt get you into trouble one day. :)

Andrew Savige

unread,
Jul 20, 2003, 9:36:20 AM7/20/03
to
Harry Mason <sp...@no.spam> wrote in message news:<slrnbhfa7...@tarrant.ecs.soton.ac.uk>...

Main link for Acme::EyeDrops: http://search.cpan.org/dist/Acme-EyeDrops/
You can download the module or browse its documentation from here.
It seems you can also directly browse its documentation from this link:
http://search.cpan.org/dist/Acme-EyeDrops/lib/Acme/EyeDrops.pm

As Acme::EyeDrops author, I'd like to clarify a few points:

1) Why the double eval? To allow encoding of escapes within double quoted
strings, for example "\n" for a hard newline. The sightly encoding can
even encode binary files since Perl can escape arbitrary octal/hex chars
inside double quoted strings. (I call it "sightly" because it contains
no unsightly letters or numbers).

2) In many cases, the double eval can be eliminated by embedding the program
inside a regular expression (Regex attribute), yielding a "pure" sightly
program, free of all alphanumerics. See the "Somersaulting Camel" section
of the documentation for an example of such a camel-shaped program that
somersaults across the screen when run.

3) The Text attribute (pour_text) function can be used to pour plain text
into an arbitrary shape (see the "Snowflakes" section of the documentation
for an example). This might be useful to make it less tedious to pour a
Java program into an arbitrary shape, say. Bear in mind, however, that
this simple function knows nothing of Java syntax, so (unlike the sightly
encoded camel) you will need to manually touch it up by hand.

Shameless plug: the current ascii art images (.eye files) can be browsed
on-line at:
http://search.cpan.org/src/ASAVIGE/Acme-EyeDrops-1.40/lib/Acme/EyeDrops/
but I am no ascii artist, so contributions from this newsgroup are most
welcome and will be acknowledged in future distributions. Please bear in
mind, though, that ascii art suitable for EyeDrops is very limited in that
it must be quite large and simple (like the camel example given earlier),
so as to allow you to fill it with arbitrary program code.

/-\

colin randall

unread,
Oct 9, 2021, 9:42:53 PM10/9/21
to
----------------------------------------------------------------------------------------------------------------
Hi ...
Thats an interesting piece of art
i dont have perl installed and i'd be curious to know what its output
looks like

colin
--
.
._!__ __ __
/ _\/_ |_ \!_
/ / 7 / /|
\ \_ _/ / \ .
\_//__/|_\_\!_.
|

Eli the Bearded

unread,
Oct 11, 2021, 2:01:36 PM10/11/21
to
In alt.ascii-art, colin randall <colin.r...@googlemail.com> wrote:
> On Wednesday, July 16, 2003 at 9:07:44 AM UTC+1, Harry Mason wrote:

I'd make a suggestion, but 19 years later it might not help.
> Thats an interesting piece of art
> i dont have perl installed and i'd be curious to know what its output
> looks like

It just prints "hello, world".

There are a bunch more examples in the documentation for Acme::EyeDrops,
but trying a few, I was unable to get them to produce output (other
than errors[*]). Chances are the output ASCII art code is rather
sensitive to changes in Perl syntax.

https://metacpan.org/pod/Acme::EyeDrops

[*] Example, with Perl v5.26.1
Eval-group not allowed at runtime, use re 'eval' in regex
m/(?{eval"\$~=pop||'';open\$%;y,!-~,#,,s,(.).,\$+,gs,\$~&&(\$_=reverse)for\@~=grep\$|--,('')x18,<0>;\@;=map~~reverse,re.../
at /tmp/p line 48.
For the similarly shapped "camel.pl"

Elijah
------
has not tried using all the ancient versions of Perl he has access to

Colin Randall

unread,
Oct 17, 2021, 2:35:39 PM10/17/21
to
ok ... thanks for that ... sorry to have put you to the trouble ...

so it was just an example of a "caligram" using the Acme::EyeDrops tool

if it had been C or Bash or even Pascal i would've been able to read it
... hadn't realized that Perl was so 'parentheses' heavy ... kind of
looks like it was made with a bracket-generator :)

Eli the Bearded

unread,
Oct 18, 2021, 7:20:01 PM10/18/21
to
In comp.lang.perl.misc, Colin Randall <colin.r...@gmail.com> wrote:
> On 11/10/2021 19:01, Eli the Bearded wrote:
>> has not tried using all the ancient versions of Perl he has access to
> ok ... thanks for that ... sorry to have put you to the trouble ...

That level of effort was no trouble. Digging out Perl v1.0.0 or the like
is doable, but trouble.

> so it was just an example of a "caligram" using the Acme::EyeDrops tool
>
> if it had been C or Bash or even Pascal i would've been able to read it
> ... hadn't realized that Perl was so 'parentheses' heavy ... kind of
> looks like it was made with a bracket-generator :)

Perl is _extremely_ flexible with syntax, so you can write stuff using
either all punctuation or virtually no punctuation. Perl got a very
bad reputation for that ("write-only software") and Python reaped the
reward.

I know Perl well, and if I spent time I could figure out what how that
camel ASCII art works, but it's not immediately obvious to me.

(I don't know Python well, but I can do some basic work in it.)

There used to be a tradition of writing short scripts that show-off
esoteric Perl knowledge and just print "just another perl hacker" or
similar. These went a long way to furthering the "Perl is hard to
read" reputation. I wrote this one in the late 1990s as an example of
"no punctuation":

perl -e 's Y Yreverse q N ny pm srekcah lrep kroy wen emosNYex and s Pmp ynP
P and s MsMjust sMx and print and s NYPM MPYN Nis or reverse and print q qq'

It prints "just some new york perl hackers " (trailing space is in output
but is just there for getting the two lines of code to be the same
length). It includes "NY" "PM" in a bunch of forms, referencing the New
York Perl Mongers group.

I've got some others in my old ~/sigs collection, two of which may be
interesting here:

$ perl ~/sigs/japh.I
_ _ _ _ _
| |_ _ ___| |_ / \ _ __ ___ | |_| |__ ___ _ __
_ | | | | / __| __| / _ \ | '_ \ / _ \| __| '_ \ / _ \ '__|
| |_| | |_| \__ \ |_ / ___ \| | | | (_) | |_| | | | __/ |
\___/ \__,_|___/\__| /_/ \_\_| |_|\___/ \__|_| |_|\___|_|

____ _ _ _ _
| _ \ ___ _ __| | | | | | __ _ ___| | _____ _ __
| |_) / _ \ '__| | | |_| |/ _` |/ __| |/ / _ \ '__|
| __/ __/ | | | | _ | (_| | (__| < __/ |
|_| \___|_| |_| |_| |_|\__,_|\___|_|\_\___|_|

$ cat ~/sigs/japh.I
#!/usr/bin/perl -w
use Shell;
print(figlet(qw(Just Another Perl Hacker)));
__END__
$ perl ~/sigs/stpat.pl
Elijah




mmm mmm
MMMMVMMMM
VMMMMMMMV
mmmmm VMMMMMV mmmmm
JMMMMML VMMMV JMMMMML
VMMMMMMmmJMMMLmmMMMMMMV
:MMMMMMMMMMMMMMMMMMMMM:
1MMMMMM"""JP""""MMMMMM1
?MMMMMP V: ?MMMMMV
""""" 1L """""
"P





$ cat ~/sigs/stpat.pl
sub e{printf"%c",shift}for($b=141596885;$b>8;$b>>=4){&e(97-($b>>22)+($b&15))}$
_="}X/+c)cyX/*494yX/*979yX+e*959*eyX*I5Q*939*I5QyX*96bI3Qb69yX*!777!yX*Y6kIql"
."6YyX*A5q+9!,A59yX+m,YQ-myX/-iq~y";s:X:///:g;@b=/./g;$_=qq'Eli!: MV?JL1m"P\n'
;@e=/./sig;for($a=0;$a<128;){$b=ord$b[$a++];for(;$b&7;){&e(ord$e[($b-->>3)])}}
$

Elijah
------
reused some tricks from the C animation sig in the stpat one

Christian Garbs

unread,
Oct 23, 2021, 2:58:06 PM10/23/21
to
Eli the Bearded <*@eli.users.panix.com> wrote:

> $ cat ~/sigs/japh.I
> #!/usr/bin/perl -w
> use Shell;
> print(figlet(qw(Just Another Perl Hacker)));
> __END__

UUOP ;-)

I finally found an old one of mine:

($a,$b,$c)=localtime time;sub a{int(31+sin($_[0]/57)*$_[1]).int(#mi...@cgarbs.de
31-cos($_[0]/57)*$_[1])}for(3..50){$i{a($b*6,$_/3)}++;$i{a($c*30%360+$b/2,$_/5)}
++}for(0..359){$i{a($_,19)}++;$i{a($_,16)}++if!($_%30)}for$y(6..26){for(11..52){
print((' ','"','o','8')[(exists$i{$_.$y*2})*2+exists$i{$_.($y*2-1)}])}print"\n"}

I won't post the output, try to guess ;-)

Hint: The output changes regularly, you could run it in a loop like
"while perl the_script.pl; do sleep 1m; done".

This still runs with a current Perl, even with -w enabled.

Best regards
Christian
--
....Christian.Garbs....................................https://www.cgarbs.de
Murphy's Laws of Combat:
20. Never forget that your weapon is made by the lowest bidder.

Colin Randall

unread,
Oct 28, 2021, 10:20:48 PM10/28/21
to
On 23/10/2021 19:58, Christian Garbs wrote:
> Eli the Bearded <*@eli.users.panix.com> wrote:
>
>> $ cat ~/sigs/japh.I
>> #!/usr/bin/perl -w
>> use Shell;
>> print(figlet(qw(Just Another Perl Hacker)));
>> __END__
>
> UUOP ;-)
>
> I finally found an old one of mine:
>
> ($a,$b,$c)=localtime time;sub a{int(31+sin($_[0]/57)*$_[1]).int(#mi...@cgarbs.de
> 31-cos($_[0]/57)*$_[1])}for(3..50){$i{a($b*6,$_/3)}++;$i{a($c*30%360+$b/2,$_/5)}
> ++}for(0..359){$i{a($_,19)}++;$i{a($_,16)}++if!($_%30)}for$y(6..26){for(11..52){
> print((' ','"','o','8')[(exists$i{$_.$y*2})*2+exists$i{$_.($y*2-1)}])}print"\n"}
>
> I won't post the output, try to guess ;-)
>
> Hint: The output changes regularly, you could run it in a loop like
> "while perl the_script.pl; do sleep 1m; done".
>
> This still runs with a current Perl, even with -w enabled.
>
> Best regards
> Christian
>
a guess:
a circular motion of an email-addy leaving a trail


the following looks like it could be the original camel?

originally posted by Philip Taylor:
And here's another Perl camel, copied from
http://www.perl.com/CPAN-local/misc/japh :

#!/usr/bin/perl -w
use strict;

$_='ev
al("seek\040D
ATA,0, 0;");foreach(1..3)
{<DATA>;}my @camel1hump;my$camel;
my$Camel ;while( <DATA>){$_=sprintf("%-6
9s",$_);my@dromedary 1=split(//);if(defined($
_=<DATA>)){@camel1hum p=split(//);}while(@dromeda
ry1){my$camel1hump=0 ;my$CAMEL=3;if(defined($_=shif
t(@dromedary1 ))&&/\S/){$camel1hump+=1<<$CAMEL;}
$CAMEL--;if(d efined($_=shift(@dromedary1))&&/\S/){
$camel1hump+=1 <<$CAMEL;}$CAMEL--;if(defined($_=shift(
@camel1hump))&&/\S/){$camel1hump+=1<<$CAMEL;}$CAMEL--;if(
defined($_=shift(@camel1hump))&&/\S/){$camel1hump+=1<<$CAME
L;;}$camel.=(split(//,"\040..m`{/J\047\134}L^7FX"))[$camel1h
ump];}$camel.="\n";}@camel1hump=split(/\n/,$camel);foreach(@
camel1hump){chomp;$Camel=$_;y/LJF7\173\175`\047/\061\062\063\
064\065\066\067\070/;y/12345678/JL7F\175\173\047`/;$_=reverse;
print"$_\040$Camel\n";}foreach(@camel1hump){chomp;$Camel=$_;y
/LJF7\173\175`\047/12345678/;y/12345678/JL7F\175\173\0 47`/;
$_=reverse;print"\040$_$Camel\n";}';;s/\s*//g;;eval; eval
("seek\040DATA,0,0;");undef$/;$_=<DATA>;s/\s*//g;( );;s
;^.*_;;;map{eval"print\"$_\"";}/.{4}/g; __DATA__ \124
\1 50\145\040\165\163\145\040\157\1 46\040\1 41\0
40\143\141 \155\145\1 54\040\1 51\155\ 141
\147\145\0 40\151\156 \040\141 \163\16 3\
157\143\ 151\141\16 4\151\1 57\156
\040\167 \151\164\1 50\040\ 120\1
45\162\ 154\040\15 1\163\ 040\14
1\040\1 64\162\1 41\144 \145\
155\14 1\162\ 153\04 0\157
\146\ 040\11 7\047\ 122\1
45\15 1\154\1 54\171 \040
\046\ 012\101\16 3\16
3\15 7\143\15 1\14
1\16 4\145\163 \054
\040 \111\156\14 3\056
\040\ 125\163\145\14 4\040\
167\1 51\164\1 50\0 40\160\
145\162 \155\151
\163\163 \151\1
57\156\056

Colin Randall

unread,
Oct 29, 2021, 3:46:46 AM10/29/21
to
[begin script output]
mJXXLm. .mJXXLm
JXXXXXXXXL. JXXLm. .mJXXL .JXXXXXXXXL
{XXXXXXXXXXX. JXXXmXXXXm mXXXXmXXXL .XXXXXXXXXXX}
.XXXXXXXXXXXXXL. {XXXXXXXXXF 7XXXXXXXXX} .JXXXXXXXXXXXXX.
JXXXXXXXXXXXXXXXXL.`XXXXXX. .XXXXXX'.JXXXXXXXXXXXXXXXXL
JXXXXXXXXXXXXXXXXXXXmXXXXXXX. .XXXXXXXmXXXXXXXXXXXXXXXXXXXL
.XXXXXXXXXXXXXXXXXXXXXXXXXXXXX} {XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXF 7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XX'7XXXXXXXXXXXXXXXXXXXXXXXXXF 7XXXXXXXXXXXXXXXXXXXXXXXXXF`XX
XX {XXXFXXXXXXXXXXXXXXXXXXXF' `7XXXXXXXXXXXXXXXXXXX7XXX} XX
`X}{XXX'7XXXFXXXXX^XXXXX `' `' XXXXX^XXXXX7XXXF`XXX}{X'
`'XXX' {XXX'XXXXX 7XXXF 7XXXF XXXXX`XXX} `XXX`'
.XX} {XXF {XXXX}`XXX} {XXX'{XXXX} 7XX} {XX.
{XX `XXL `7XX} 7XX} {XXF {XXF' JXX' XX}
`XX `XXL mXXF {XX XX} 7XXm JXX' XX'
XX 7XXXF `XX XX' 7XXXF XX
XX. JXXXX. 7X. .XF .XXXXL .XX
{XXL 7XF7XXX. {XX XX} .XXXF7XF JXX}
`XXX' `XXXm mXXX' `XXX'
^^^^^ ^^^^^
.mJXXLm mJXXLm.
.mJXXL .JXXXXXXXXL JXXXXXXXXL. JXXLm.
mXXXXmXXXL .XXXXXXXXXXX} {XXXXXXXXXXX. JXXXmXXXXm
7XXXXXXXXX} .JXXXXXXXXXXXXX. .XXXXXXXXXXXXXL. {XXXXXXXXXF
.XXXXXX'.JXXXXXXXXXXXXXXXXL JXXXXXXXXXXXXXXXXL.`XXXXXX.
.XXXXXXXmXXXXXXXXXXXXXXXXXXXL JXXXXXXXXXXXXXXXXXXXmXXXXXXX.
{XXXXXXXXXXXXXXXXXXXXXXXXXXXXX. .XXXXXXXXXXXXXXXXXXXXXXXXXXXXX}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXF
7XXXXXXXXXXXXXXXXXXXXXXXXXF`XX XX'7XXXXXXXXXXXXXXXXXXXXXXXXXF
`7XXXXXXXXXXXXXXXXXXX7XXX} XX XX {XXXFXXXXXXXXXXXXXXXXXXXF'
`' XXXXX^XXXXX7XXXF`XXX}{X' `X}{XXX'7XXXFXXXXX^XXXXX `'
7XXXF XXXXX`XXX} `XXX`' `'XXX' {XXX'XXXXX 7XXXF
{XXX'{XXXX} 7XX} {XX. .XX} {XXF {XXXX}`XXX}
{XXF {XXF' JXX' XX} {XX `XXL `7XX} 7XX}
XX} 7XXm JXX' XX' `XX `XXL mXXF {XX
XX' 7XXXF XX XX 7XXXF `XX
.XF .XXXXL .XX XX. JXXXX. 7X.
XX} .XXXF7XF JXX} {XXL 7XF7XXX. {XX
mXXX' `XXX' `XXX' `XXXm
^^^^^ ^^^^^

And all the camels are the same shape as the picture on the front of the
book Programming Perl which, according to the book's Colophon, is "a
camel (one-hump dromedary)"...

... so no i know
0 new messages