I had initially just wanted to mention OmniPerl, but it spun off onto a rant about OmniMark. Oh well, its fun to beat up on. On Mon, Oct 11, 1999 at 09:50:55PM +0100, Adam Sampson wrote: > The other evening, I had this idea for a truly twisted bit of obfuscation. I > figure either Perl or C would be the best. The problem is that I have no > idea whether it's actually possible. > > My idea is to have a program which does one thing, but does something > completely different when read out loud and retyped. For instance, the > original program could contain: > > ... $star=twosemicolonprint; ... > > which could become > > ... dollar*=2;print semicolon ... > > Any ideas? Use OmniPerl! Its CHEAPER THAN OMNIMARK! http://www.pobox.com/~japhy/OmniPerl/ With the simple Perl Objects -> OmniPerl converter (poop) you can get rid of those nasty strange characters. For instance, the obfuscated program: @array = qw(foo bar yar); print join ', ', @array; Becomes the clear, simple: at array space equals space qw openparen foo space bar space yar closeparen semicolon newline print space join space tick comma space tick comma space at array semicolon newline Which can then be quickly run by the OmniPerl program! And its faster than Perl because its compiled [into English]! You can probably adapt poop and OmniPerl to your needs. For those of you who don't get the joke, OmniMark is this weird SGML parsing language that showed up at TPC3 claiming to be "Cheaper Than Perl". A close-source commercial language at the Open Source conference, showing off their Windows-only IDE (they gave out CDRoms for Windows) at the Linux conference loudly claiming to be "Cheaper Than Perl" at the Perl Conference. Can we say, "Bad marketing idea?" Here's some of the fun things from Omnimark: "OmniMark is cheaper than Perl because it is readable" "OmniMark is cheaper than Perl because it is more concise" Here's an example of a regex in Omnimark take from their promos: match white-space* digit+ blank+ digit+=>y "-" digit{2}=> m "-" digit{2}=> d blank+ digit{2}=> h ";" digit{2}=>min ":" digit{2} => s Somebody tell me why this is cheaper than: ($year, $month, $day, $hour, $min, $sec) = /\d+[ ]+(\d+)-(\d{2})-(\d{2})[ ]+(\d{2});(\d{2}):(\d{2})/; They're both equally incomprehensible to the untrained eye, IMHO. "Perl is free. OmniMark is free." No, Perl is Free, parts of OmniMark are free. The compiler and virtual machine are free. Their "first-class IDE" costs $700 for commercial use. "OmniMark is cheaper than Perl because it has a first-class IDE" Yeah, only on Windows and for $700. If commercial and Windows-only are the criteria, then ActiveState has Perl convered. "OmniMark is cheaper than Perl because it is well supported" At only $150 per tech support call, WHAT A BARGIN! And allll those OmniMark books out there for you to learn from! "OmniMark is cheaper than Perl because it has integrated XML support" They've got us there. If their code examples are to be believed, their XML, SGML and HTML parsing is really, really good. It looks like that's the basis for the language. I wish they'd stick to what they're good at instead of trying to compete with Perl. "OmniMark is cheaper than Perl because OmniMark was designed for text processing. Although you can do many things in Perl, it was designed to be a UNIX system administrator's tool." I'll just leave that one right where it is. "OmniMark is cheaper than Perl because it is more readable. OmniMark has a clear English-like syntax." Yes, OmniMark follows on the heels of the spectacular successes of BASIC and COBOL! "OmniMark is cheaper than Perl because it is more concise. You can often do as much in one line of OmniMark as you can in five lines of Perl..." Wow, I've -never- see anyone claim to be more concise than Perl. Let's look at some of this wonderful consiceness. Hmmm, in Perl, if you wanted to print out the numbers one to ten, you'd do the labour-intensive: for(1..10) { print "$_\n" } But with OmniMark's conciseness, you can do it even simpler! Watch! macro repeat for token counter-name from arg min-value to arg max-value doing arg actions again is do local counter counter-name set counter-name to min-value repeat exit when counter-name > (max-value) actions increment counter-name again again done macro-end repeat for column-number from 1 to 10 doing output "\emptycolumn{%d(column-number)}" again Ooops! OmniMark has no for loops! So we had to construct one ourselves with a macro. But, still, as you can see, OmniMark is much cheaper than Perl. "OmniMark is cheaper than Perl because it can be compiled. OmniMark code can be distributed and run either in source form (like Perl) or as compiled byte code (like Java). Distributing OmniMark applicaitons as byte code protects your business process and you intellectual property... OmniMark saves you money by protecting your security and your revenues." Ahh, yes. The old fallacy of compilation that we know so well. As everyone knows, compiling hides nothing. That eeevil hacking tool /usr/bin/strings can still get at your precious business process. And, of course, byte code can easily be decompiled. And compiled languages are not inheritly faster than interpreted. -- Michael G Schwern schwern@pobox.com http://www.pobox.com/~schwern /(?:(?:(1)[.-]?)?\(?(\d{3})\)?[.-]?)?(\d{3})[.-]?(\d{4})(x\d+)?/i ==== Want to unsubscribe from Fun With Perl? Well, if you insist... ==== Send email to <fwp-request@technofile.org> with message _body_ ==== unsubscribe