Larry Wall's Very Own Home Page
wall.org
wall.org
I have a very charming Larry Wall story. He came to give a seminar to the research center where I was working, and gave a fantastic talk on Perl 6. Late in the evening, I ran into him and his wife on the bus when getting home from work - and started talking to them. Apparently, nobody from the department had arranged to take them out for dinner, so we ended up going out for dinner together, where we had a fantastic discussion covering religion, tolerance, and lots of other topics. I am a staunch materialist and atheist, while both the Walls are serious committed Christians, but we had a really pleasant discussion on religion and the nature of evidence.
I ended up giving his wife a copy of Hume's Dialogue on Natural Religion, and they were kind enough to sign a copy of the Camel book for a friend who is a huge Perl fan.
A lot of people know Larry by reputation - but his wife Gloria is just as smart and kind. It was a bit of a strange evening, but it was a rare privilege to meet two such interesting people.
I cannot emphasize enough how unassuming, kind and decent the Walls are. If you are also interested in very intelligent writing about religion, their son, Aaron, has a very neat blog: http://www.wall.org/~aron/blog/.
I've had conversations like these, about VERY sensitive topics, with friends who disagreed, and none of us held a grudge (that I know of). I miss that.
I know this happened years ago, but still, thanks for sharing. It gives me hope.
https://web.archive.org/web/20170614081541/http://www.uwgb.e...
PS: I am not talking about spiritual people, I am talking about religious people who participate in religious processes without question and often financially help their religious institution to further the spread of it.
Larry Wall is a wonderful human who I had the privilege of meeting back in college. He came out for a summer tech conference we were hosting and was the keynote speaker. When we broke out into small groups he was in mine and we chatted a bit. He was the first internet famous person I had ever met - kind and unassuming, and also the creator of something highly successful in the Perl programming language.
Perl was one of the original web languages and the Swiss Army knife of scrappy programmers and sysadmins everywhere. It was a direct influence on many more recent programming languages, including Python and Ruby to name a few.
My friends and I discovered this very own home page back around the time I met him some 10 years ago. It was where I first learned the word "chartreuse", and I'm still not fully sure what color that refers to. You can find some of his writings under the "My Ravings" section, which are a hoot.
One of my favorites of his writings is The Three Virtues of a programmer (http://threevirtues.com/):
Laziness: The quality that makes you go to great effort to reduce overall energy expenditure. It makes you write labor-saving programs that other people will find useful and document what you wrote so you don't have to answer so many questions about it.
Impatience: The anger you feel when the computer is being lazy. This makes you write programs that don't just react to your needs, but actually anticipate them. Or at least pretend to.
Hubris: The quality that makes you write (and maintain) programs that other people won't want to say bad things about.
And thanks for the three rules maybe now I might explain my manager why my laziness is good
There are actually two kinds of Chartreuse, one green (easiest to find) and one yellow. The recipe supposedly containing over 100 medicinal herbs, Chartreuse was originally sold as a "health elixir" rather than a digestif. To this day the recipe is still held secret in the monastery, although production has scaled up.
As you may have guessed, it's one of my favorite liqueurs and has become my go-to "last drink" (after a big meal, when my guests leave).
Also, if you ever go skiing in the Alps, you can mess with the locals of Savoie by asking for a Chartreuse rather than a Genepi[2], a similar drink from there.
[1]: https://en.wikipedia.org/wiki/Chartreuse_(liqueur) [2]: https://en.wikipedia.org/wiki/G%C3%A9n%C3%A9pi
[0] https://en.wikipedia.org/wiki/Chartreuse_(liqueur) [1] https://en.wikipedia.org/wiki/Grande_Chartreuse [2] https://en.wikipedia.org/wiki/Chartreuse_(liqueur)#/media/Fi...
1: https://en.wikipedia.org/wiki/Into_Great_Silence
2: https://www.amazon.com/Into-Great-Silence-Two-Disc-Set/dp/B0...
https://www.goodreads.com/quotes/568877-i-choose-a-lazy-pers...
https://en.wikipedia.org/wiki/Chartreux
(I wonder if Mr Wall is a dog person or a cat person type. I just realize now that having a cat stomping around could explain the look of some perl code... mmhh)
As a junior programmer, I had to do some maintenance work on a couple of daemons written in C that were just launchers for other programs. A couple thousand lines of messy, badly structured C. So I had the clever idea to just rewrite them in Perl. Suddenly they were 50 lines, easy to read, robust, and had really useful logging.
Perl 4 also spoke Sybase really well, which made it our reporting tool of choice. We could grab whatever from our Sybase databases, and format nice printed/screen reports easily in Perl.
I was really excited when Perl 5 came out, but ugh. I wound up writing about 10,000 lines of it at a dotcom, and it was so, so ugly. All the stuff that made 50 line Perl 4 beautiful made 10,000 line Perl 5 an unreadable mess. Worse, there were three of us writing it, so consistent coding standards were a big challenge.
I don't use Perl anymore for anything but one-liner fancy greps on the command line. If I have to write an actual script, it'll either be plain sh/ksh/bash, or Python or Ruby if it needs structure. I'm not going to waste my brain trying to write readable code in Perl anymore.
In the early nineties it was a force multiplier, and then it seemingly just imploded in on itself.
Perl 5 saved Perl from itself, too bad Perl 3/4 lovers kept writing Perl 3 years after 2000 until they saw the light and the truth and moved to Python.
I find that Perl gets a bad rap for being "unreadable". In my experience the readability of Perl is the direct result of the discipline of the person writing it. It's not hard to write readable, maintainable Perl 5, but it's _easy_ to write _crap_ Perl 5. So, you have to be disciplined in how you create things.
I learned Java before I learned Perl so I've always tried to write code with small functions, use strict enabled and clear variables and I've often heard people say about my code:
"I didn't know that you could do that with Perl! I thought it was just an ugly scripting language."
Python is like the opposite of Perl in that respect. It's inherently readable, and you have to go out of your way to make it difficult to grok what the code is doing. (Ruby is somewhere in the middle, but Ruby is more eloquent than Python, so I'll take a little clarity risk for the potential of even greater clarity.)
There's a joke running around Twitter about how it's hard to tell the difference between Perl and a cat stepping on your keyboard. You'll never see that for Python or Ruby.
In comparing Python, Ruby and Perl, each relies to a certain extent on symbols in the code to express meaning. Python uses symbols very sparingly, and those it does use are either very much like other languages or established patterns from mathematics, even going so far as to ban braces for indicating structure--nothing is exotic. Perl is the opposite extreme, with to sigils encode variable context (which is a concept foreign to other language) and complex regular expression and quoting schemes built into to language. Ruby sits very much in the middle between these languages.
The use of all non-word symbols to densely encode meaning helps reduce code size at the cost of apparent readability. That's why you think Ruby is "more eloquent". Perl can be even more expressive than Ruby, but it's compactness can intimidate people, leading to defensive "humor".
Real readability comes from good structure and explicit code, whatever the language. It is especially important for developers using dynamic languages to document the contents of their data-structures.
If Python tends to be readable, it comes from a culture that values readability and focuses heavily on choosing a single, consistent style. Not from any inherent technical factor.
This is a nice piece on code readability in real life terms: http://www.pgbovine.net/python-unreadable.htm (TLDR: code may be readable in over small sections, but what really matters is whether you can understand the whole program. If you get lazy, you will make a mess. Be explicit.)
And yes, Perl is even more powerful than Ruby when it comes to making code compact, but compactness and eloquence are two different things.
Yeah, that's the best description of Perl I've ever read.
At the time when the options were Perl awk, or C, it was a great language. It's just past its own time now.
I have written some truly awful Perl in my day, and now and then some that I can look through again years later and acknowledge as not too bad. It has saved me, and through me people I work with, a great deal of time.
Interesting. Can you elaborate a bit on what changes made 5 worse than 4, in your opinion?
>Perl 4 also spoke Sybase really well, which made it our reporting tool of choice. We could grab whatever from our Sybase databases, and format nice printed/screen reports easily in Perl.
Can confirm that about Perl and Sybase, anecdotally. A friend worked at banks in Singapore and Japan that used sybperl, which was a way to use Sybase from Perl. IIRC he said it made writing DB-related programs easy.
$this->{mess}
The "object oriented" stuff, while making it more powerful, looked like modem line noise, and created a half-dozen new ways to say the same thing. It drifted away from the shell-like nature of Perl 4, and lost a lot of clarity.
At that point, you might as well start using a heavier language.
You rarely write accessor methods yourself in Perl 5. In Perl 6, you describe your accessors/mutators in the class definition:
class Pointer {
has $.x; # a ro accessor
has $.y is rw; # a rw mutator
}
Which, by the way, is now faster than Perl 5.> has $.y is rw; # a rw mutator
Opinion: I don't like the asymmetry of that, although I do understand that having to write "is ro" too, would make the language slightly more verbose.
Python has something similar with the syntax for properties; don't like that syntax too, for the same reason (asymmetry).
E.g.: The 2nd code example in the question here -
https://stackoverflow.com/questions/17330160/how-does-the-pr...
- the one that uses
@x.setter
I'm not a language designer or close to it, though, just saying. multi sub trait_mod:<is> (Attribute:D $attr, :$ro!) {
# no need to do anything, because this is the default
}
class Pointer {
has $.x is ro;
has $.y is rw;
}
That is assuming you aren't fine with using `is readonly`. class Pointer {
has $.x is readonly;
has $.y is rw;
}
Which works better with the trait mod `is required` class Pointer {
has $.x is readonly is required;
has $.y is rw;
}Useless trivia. Both the . and the -> notations for OO programming have their roots in C. If foo is a struct, and bar is a property of the struct, foo.bar pulls that property out. If baz is a pointer to foo, then baz->bar does likewise.
In Perl the . was already taken for string concatenation, so -> was the next reasonable choice. And the analogy is surprisingly exact. For example if $foo = $bar = {} then calling bless($foo) will also bless $bar since both are just references to the actual object.
As for lots of ways to say the same thing, TIMTOWTDI was an intentional goal.
I admit there was a lot of "clever" code, but contrary to those who didn't bother learning the language, I didn't mind much.
The big thing is that in Perl arrays and hashes act like they are infinite.
For example, you can read past the end of arrays or from non-existent hash entries and you get undef, not an error.
In a lot of applications, that is terrible. You want an error, like you get in Python. For those applications, I'd probably pick Python3 over using Perl and having to put things like "die unless exists $hash{$foo}" all over the place.
But for a lot of applications, especially involving reports where going in you don't know what you actually want or need, it is great. For instance, let's say I'm doing a report on sales. At some point I have $account (the account identifier for a customer), $service (a service we offer that they use), and $amount (the amount they ordered of the service on a particular order).
If I have a hash, "my %count", I can use it like this in Perl:
++$count{$account}{$service}{orders};
++$count{$account}{orders};
++$count{orders}
$count{$account}{$service}{total} += $amount
$count{$account}{total} += $amount;
$count{total} += $amount
In the other languages I'd have to somewhere in there explicitly do something equivalent to: $count{$account} = {}
when I start processing $account, and $count{$account}{$service} = {}
the first time I come across an order of $service for $account.That doesn't seem like much, but it is noise and if I've got enough different kinds of things I'm accumulating stats on so that I've got a lot of those it gets distracting, the same way that for programs where accessing things not predefined would be a sign of a serious error putting "die unless exists $hash{$foo}" all over the place would be distracting (and so it is clearer to do those programs in Python).
Now suppose I find out that on the report I need to not only list the count for each account of their orders for each service but the order numbers of all the orders. Simple. Just change:
++$count{$account}{$service}{orders};
to push @{$count{$account}{$service}{orders}}, $order_number;
and anyplace that was using $count{$account}{$service}{orders} as that count, change to using the length of that array (and of course add something to the final output that iterates the array and prints the order numbers in some pretty way).If a language removes enough of these distractions, you can get into a very productive rapid experiment and feedback loop.
In a sense, I think removing distractions is kind of the point of high level languages. A distraction is anything that that is there that is not a natural part of the way a human thinks about the problem at hand but that is needed because the computer needs it. For example, memory management is a computer thing, not a human thing, so we expect high level languages to handle that.
Once that productive experimental phase is done, though, some of those things that were distractions might cease to be so. They can then become useful documentation to future readers of how the following code intended to use things.
That makes using a language like Perl, which lets you leave off those things when they are distractions, require some discipline if you use it for things that aren't one time throwaways. You need the discipline to go back and put those declarations in, or better to add some block comments explaining your final data structures. If you don't have that discipline, stay away from Perl.
But if you do, or if you are sure it is a one time throwaway, Perl can be a great choice.
https://docs.python.org/3/library/collections.html#collectio...
I guess require-ing files all over the code and using the global scope for everything and using globals or even a global hash and having functions read and write to that hash is something to be regretted. Not that C is much better.
I have maintained and ported Perl 3 and 4 to Perl 5, I must say the existence of PHP3 made sense after that :)
There was that trick using goto and exit to simulate functions that people writing Perl 3/4 loved. Was it done for performance reasons ?
> Most of you are familiar with the virtues of a programmer. There are three, of course: laziness, impatience, and hubris.
> These are virtues of passion. They are not, however, virtues of community. The virtues of community sound like their opposites: diligence, patience, and humility.
> They're not really opposites, because you can do them all at the same time. It's another matter of perspective. These are the virtues that have brought us this far. These are the virtues that will carry our community into the future, if we do not abandon them.
Take a look at the background colour of the web site that this thread is about. :-)
I still think nothing comes to beat Perl when it comes to regex, and unix level scripting work.
I eventually moved on to other backend languages/stacks. But I still miss the productivity boost Perl is.
Over the years, I came to realize I like Perl so much, not because what Perl is, but the underlying concepts. Eventually I realized Perl is the closest to Lisp in the C world. And I like Perl, because I liked Lisp more. Lisp offers everything Perl offers, and more. And Lisp is infamous for almost the same reasons. These days I think Perl refugees will eventually find refuge somewhere in the Common Lisp or Clojure camps. And that is really good, because Perl like languages are basically a programming philosophy.
Lastly, Higher Order Perl(free to download online) is one of the best programming books you will read. Its a book on the same lines as OnLisp from Paul Graham.
Perl never made the javascript transition, but I think you call tell a lot about a programmer by the look in their eyes when you say perl. If the eye twinkles with delight at perl's simplicity, and then the expression is occasionally replaced by a murderous look of rage when you have to maintain a 5k line script, you can tell that the programmer is a great programmer and has a tale or two to inform more junior members of our profession.
Try dozens of 5k line Perl scripts
I think my expression will soon be permanently fixed into a look of murderous rage
There are a lot of great things to say about Perl, but does anyone call it simple?
I wrote code for a bank using perl. I'd say 95% of their code at the time was in perl. Website called perl, back-end processing was perl scripts. Cron jobs were all perl script that needed to run to do house-keeping.
(Edit: disappointed to see the Perl link doesn't actually work).
Perl is still one of the most widely used languages in world today.
I think it's safe to assume that the people choosing not to use perl have a good enough reason for their decision.
50% of my (new) projects remain in Perl. The other 50% in a mixture of C, Go, and C++.
I design semiconductors and every week I have to write a couple of small scripts to process text files or reports and that is always in Perl. Everyone at work knows Perl. Those that don't learn it.
The EDA tools mostly use Tcl as the internal scripting language so I have to use that.
I have no problem with new languages but I find regex's in other languages to be too verbose.
I personally really like Perl. It does kinda encourage code-golfing, but that's what makes it so nice for one-off scripts.
As Perl grew up, the idea of "you have tests for at least basic stuff" was built into the culture. For example back in the mid-90s it was expected that every module came with a test suite, and every site would run that test suite before installing the module. When you went to package something for CPAN, you were expected to have a ./t directory with tests, and there were lots of examples to show you how to do it. And automated scripts that expected you do to it.
It was something like 15 years before anyone thought of naming the test protocol. It was just how you did things.
And thus the inspiration for Perl :)
It's actually a really cool read - I wish he had more stuff posted on his blog to read :(
So yeah, not many people may claim that.
GEEK PERL CODE [P+++++(--)$]
My tendencies on this issue range from: "I am Larry Wall, Tom Christiansen, or Randal Schwartz.", to: "Perl users are sick, twisted programmers who are just showing off." Getting paid for it!
>I am Larry Wall, Tom Christiansen, or Randal Schwartz
http://www.jaruzel.com/apps/geekcode/
With the intention of doing something more... interactive with it. Never got around to it though. Also, search engines don't index the archiver sites, so how are people supposed to find dead stuff?
http://www.wall.org/~larry/perl.html
Perl 6 is still the future of Perl?
Perl5's CPAN is still very useful, the language is still available on most UNIX systems, it has some really nice OO modules like Moose, and the community still has lots of conferences and releases regular updates. I personally prefer Python in this space though.
Perl6 on the other hand is gorgeous. You can write beautiful OO, FP, imperative...whatever code. Grammars and MOP are great. The parallel support is cool and the Unicode support is top notch. You can also do really cool stuff not normally seen in scripting languages like restrict the type going into a function to be a non-negative integer in the range of 1..10 kind of like in Ada. The downside is that the language is still immature and adoption is slow. The VM is getting better, but with things like Nim, Julia, Crystal(fast languages), Perl6 is a tougher sell.
This is a silly debate but I suppose Zoffix has contributed enough awesome code to buy himself some credit.
In any case, it is Perl6 and changing the name now would be an even bigger mistake.
I don't feel at liberty to disclose the name, but it might be in the recent irc logs.
Perl6 is supposed to be a new approach for dynamic scripting languages. Maybe you think stuff like gradual typing means it is trying to compete with systems languages...but I don't even think it is the case that "idiomatic" Perl6 will have a lot of type annotations and I personally don't use them much.
I think a better comparison is Racket. Racket is also trying to push the boundaries for dynamic languages. I do not consider Python3 to be a competitor because it seems quite clear that Python3 is not intended to offer up much in the way of fresh thinking, just a cleaned-up Python2 (which is perfectly fine).
You should look at a tool like Perl (5 or 6) much like you would a Lisp - a dynamic system that provides interesting and useful runtime features.
I use Perl when I want features like `eval`...or when I want to push data around while delaying evaluating its type.
This is why I suggest comparing the Perls to tools like Racket.
I really like this, and hope that at least some part of the web moves towards a similar federated approach (as opposed to having all personal information on other services like FB or LinkedIn etc)
Other efforts in this vein: https://indieweb.org/
And my very own try on a webpage ( I started last week, its even worse than Larry's, please dont judge): http://www.hmontenegro.com
(I can't believe I spelled chartreuse right on the first try..)
> Getting paid for it!
On his geek code explanation?
cool. he's one of us.
Yup, who doesn't :)
That and of course there are a zillion more interesting things to do on a smart phone than talk to someone.
I think this is also largely why text-based communication is so popular: it's asynchronous. You can send someone a message, they reply when it's convenient. There's very little effort involved as the recipient (compared to say, voicemail or a live conversation).
A scheduled or expected voice call is entirely different: it's just an efficient form of communication. I personally would also rather have a 5 or 10 minute phone call than send texts or e-mails back and forth dozens of times over the course of hours or days.
The reason I hate the phone function of my phone is that I see calling someone as an ultimate disrespect: "I demand your attention and I demand it now, I don't care what you're doing, it will be up to you to call me back if you don't pick up the phone now!" Then I hate calling other people because I don't want to be disrespectful towards them.
Maybe it was different back when phones were a nice thing, nowadays, like someone mentioned, they usually mean trouble, annoyance or more work. Ugh.
For some reason, it's difficult for my brain to process even a little digital noise. A modern cell phone is just about at the limit of what I can understand. It's hard for me to carry on a conversation because I've lost my hardware acceleration. I'm spending all my cycles trying to interpolate what words were said.
Literally every 10 seconds I have to say "What did you say?" It didn't used to be this way.
Apparently, when our voice is passing congested packet networks, we need exponential backoff on OSI layer 8.
Nowadays, the tax department, my boss, various Government departments, my bank, etc. have my phone number. It's never good news.
Of course, back in the day I didn't spend 4 hours a day on YouTube and doing stuff on my computer when I get home, so I viewed telephone calls as less of an "interruption".
Whenever I pick up my phone, it's a robocall trying to sell me either insurance for a car I don't have or political stuff for a district I don't live in. If I could only talk my workplace into sending texts instead of calls, I'd never pick up my phone again.
I tried to finagle gitlab into it (since they offer free hosting and CI) but I haven't gotten the last step to quite work yet. Would be awesome to be able to work in both of line mode or through my Chromebook, and sync everything with git.
Most newer crap–web has more bugs than features and nearly defunct after all. My opinion is that in this stupid century of hype, ADD, dyslexia and internal censorship immutability is the most precious asset. And swisswatch-like software can be the next big thing.
PS. Booking.com is also cool. BTW, it is still powered by Perl.
Time to write an email to webmaster@wall.org! It's like I'm back in 1994!
Double entendre, or unix geek obliviousness?
When everything else was just fields... and javascript was to be used as little as possible.
You seem to have forgotten about "dhtml". That damned ascii-analog-clock-that-follows-your-mouse still haunts my dreams.
http://rainbow.arch.scriptmania.com/scripts/mouse_clock.html
I don't blame javascript, I blame businesses for swallowing everything in an attempt to make money. I think I miss it because people mostly created pages out of passion or curiosity, and they hung out on IRC because they didn't care if everyone could see how poignant their comments were.
I distinctly remember getting sucked into it and then having the realization that a percentage of the population were paranoid schizophrenics and that they could publish now. He helped me build some armor (and compassion) for the social media age.
You could try Reddit
My goal is to show my personality and not use a CSS framework. Partially to express myself but also to learn and practice. I have some javascript but just use it for an easy to find easter egg.
* Fabrice Bellard: https://bellard.org/
* DJ Bernstein: http://cr.yp.to/
* Tim Berners-Lee: https://www.w3.org/People/Berners-Lee/
* Richard Stallman: https://stallman.org/
* Programming in the 21st century: https://prog21.dadgum.com/
* idlewords: http://www.idlewords.com/
(Those behind Cambridge Analytica, btw)
Love it.
They mean write it on paper and put it in the mail.
And speaking of Damian Conway, who was mentioned in this thread as a possible heir-apparent, he is brilliant. I bought and read an intermediate Perl book by him. Some really good stuff in there. Forget the name of the book now, but it should be possible to find it by a web search. It might have been Object-oriented Perl.
https://en.wikipedia.org/wiki/Damian_Conway
[1] That was a kind of mild good-humored jab at him, BTW, the kind of thing that he does a lot in his talks and writings :)
If you have a chance to see Damian Conway talk, do. I don't care if you aren't interested in the topic. I don't care if you think you'll be lost in 5 minutes. Just go.
You won't regret it. I promise.