History of changes to my pages, including this one.
Added in the last four weeks.
Updated in the last four weeks.
Don't hold your breath.
Higher-Order Perl |
This area contains text, source code, and notes about my column in The Perl Journal. As new articles appear, I'll add them here.
How do Perl's regexes work on the inside? Suppose you were going to write a language like Perl, which has regexes, in a language like C, which doesn't? How might you do that?
Regex article notes and errata page
Ray tracing is one of the most flexible and versatile methods of rendering three-dimensional computer images. In this article, I show you a simple ray tracing program written in Perl and explain how it works.
One of the most important new features in Perl 5 was the capability to manage complicated data structures like multidimensional arrays and nested hashes. To enable these, Perl 5 introduced a feature called `references', and using references is the key to managing complicated, structured data in Perl. Unfortunately, there's a lot of funny syntax to learn, and the manual is not as clear in this area as it usually is. The manual is quite complete, and a lot of people find that a problem, because it can be hard to tell what is important and what isn't.
Fortunately, you only need to know 10% of what's in the manual to get 90% of the benefit. This article will show you that 10%.
The deadline for written materials for The Perl Conference got in my way, so I wasn't able to do two articles again this issue. I put my regular Bricolage column on hold and wrote another article for novices. It's about how stadard I/O buffering works and shows typical traps and hazards and how to avoid and remedy them. I think even experienced programmers will learn something from it.
If you're sad that you missed my regular Bricolage column because it was on vacation, then seeing the notes for my conference talk might make you feel better.
This article discusses issues of variable scope and duration in Perl, including packages, namespaces, and the difference between my and local. The Big Secret: Perl has two separate and totally unrelated sets of variables.
This article discusses how data compression works. It comes with a module, Huffman, which implements a simple data compression scheme in Perl.
Caching is a straightforward way to speed up certain slow functions: You remember the return values by storing them in a cache, and if you are going to compute the same value again later, just get the result from the cache instead of recomputing it. It turns out it's not hard to build a facility that replaces any function with a caching version automatically; this is called memoization. This article explains how such a module works, and shows a number of interesting applications and contexts for memoization and caching.
In my article Coping With
Scoping I offered the advice ``Always use my
;
never use local
.'' The most common use for both is to
provide your subroutines with private variables, and for this
application you should always use my
, and never
local
. But many readers (and the tech editors) noted that
local
isn't entirely useless; there are cases in which
my
doesn't work, or doesn't do what you want. So I
promised a followup article on useful uses for
local
. That is what this article is about.
I wrote a tutorial article about what precedence is and how it works in Perl.
I also wrote a review of Perl 5 For Dummies, by Paul Hoffman, published by IDG books. The review was quite a surprise to me; it didn't turn out the way I expected at all.
I wrote an article for IEEE Software magazine; it's their first-ever article about Perl. It appears in Vol. 15, #1 (the January / February 1998 issue) pages 69-74.
It's partly an introduction to the language for people who have never seen it before, and partly a big boast about how great Perl is. I'm not sure I believe that Perl is as great as I made it out to be, but I do think it's pretty good.
Read the plain text of my last draft, or get a PDF copy of the published version from The Computer Society (Computer Society members only).
Current version: 1.41. Last update: 2025-08-05.
Current version: 0.61. Last update: 2025-08-05.
The Memoize module will make your functions faster by remembering their old values and reusing them instead of recomputing the same thing twice. It is very easy to use. Very very easy. Step 1: Say memoize('some_function'). Step 2: There is no step 2. I told you it was easy.
Current version: 0.53. Last update: 2025-08-05.
This module lets you define arbitrary string interpolation semantics, which means that you can control the way variables and other expressions interpolate into your strings. Perl already provides \L...\E and \U...\E to say that a string should be put into lowercase or uppercase when it's interpolated; Interpolation extends this notion. The notation is compact and readable, and you can have as many interpolators as you want.
Current version: 0.50. Last update: 2025-08-05.
Stat::lsMode is a module for displaying file permission modes in the style of the UNIX ls -l command. For example, a plain file that is world-readable and writable only by its owner is represented by the string -rw-r--r--.
Current version: 0.1. Last update: 2025-08-05.
Locked is a module for providing scalar variables that can be locked and unlocked. Unlocked scalars behave normally. Locked scalars abort the program if you try to assign to them. Variables can be locked and unlocked; you can also test them to see if they are locked or not.
It's also a fine demonstration of the power of tie
I just wrote this, so there's little documentation and no test suite yet.
This is one of the funniest pieces of software I have ever written. It is an absolute riot. And it is even possibly useful. It is called Identity, but I am looking for a better name. If you want to know why it's useful, it will help to read the explanation first.
I don't really believe that it is the stupidest. In fact, you should watch this space for the sudden appearance of other stupid programs. But it sure is mighty stupid though.
This one may give Addition a run for its money, if only because it takes so darn long to load.
Following a suggestion of Alex Davies, this module tries to automatically locate and declare all your subroutines at compile-time, so that you don't have to do it yourself.
Read the notes and then scrutinize the code.
Sometimes Perl can take a very long time to evaluate a regular expression match. Is this a problem with Perl's implementation of regexes? The answer is no; this paper shows that regex matching in Perl is NP-complete. This means that if you could come up with an efficient way to evaluate regex matches in Perl, you would become very famous because your method would also be an efficient way to solve many other well-known and difficult problems.
Someone on comp.lang.perl.misc wanted to know why nobody was answering his questions. In answer, I wrote an article about how to ask a question so that it'll get an answer.
Why doesn't print reverse $x work? And what is `Scalar Context'? And what is the scalar builtin function for? This short article explains contexts and the scalar function.
People show up in comp.lang.perl.misc all the time asking how to use the contents of a variable as the name of another variable. For example, they have $foo = 'snonk', and then they want to operate on the value of $snonk. This anecdote suggests that is probably a bad idea, and explains what you should probably be doing instead.
This follow-on article goes into more specifics about the sorts of things that can go wrong, and what to do instead.
Is there no end to this topic? No, apparently not.
This program demonstrates what happens When Hashes Go Wrong. It accepts one command-line argument, N, which defaults to 10,000. It then constructs N strings and uses them as keys for the hash. The strings are constructed so that their hash values are all the same, so they all go into one hash bucket. This turns the hash search into a linear search---very slow.
Perl has one small win here. Normally, Perl increases the number of buckets as the number of items in the hash increases. If it did that here, it would be wasting time and space, since this program only uses one bucket. But fortunately for Perl, this program doesn't trigger the condition that makes Perl expand the hash: Perl only does that when a key is inserted into a previously empty bucket.
This program, py, implements LALR(1) parsers in Perl. These are the sorts of parsers produced by YACC and Bison. But the program is a complete oddity. Find out why.
It occurred to me today that there was a language I'd heard about before that sounded a lot like Perl. I looked it up, and sure enough, it sounded just like someone in 1967 describing Perl. You can read the description of Perl '67 and try to guess what language is really being described.
Over the next few weeks I hope to research this language and learn whether it really does resemble Perl as much as it seems to. If so, it could be a valuable example lesson that could teach us a lot about how to develop Perl and what sorts of mistakes to avoid.
If you hated this page, you'll probably also dislike:
I'd be glad to get other people's recommendations of other pages of Perl Paraphernalia.
Software entities are more complex for their size than perhaps any other human construct because no two parts are alike. If they are, we make the two similar parts into a subroutine -- open or closed. In this respect, software systems differ profoundly from computers, buildings, or automobiles, where repeated elements abound.
Fred Brooks, Jr.
Return to: Universe of Discourse main page | What's new page
百度 百度 百度qn是什么医嘱 | 芸豆长什么样子 | 荭是什么意思 | 女人的排卵期是什么时候 | 口腔科主要看什么 |
ct挂号挂什么科 | 吃什么能立马通大便 | 阴道口痒用什么药 | 人生有什么意义 | 虎都男装属于什么档次 |
开大是什么意思 | 尿痛吃什么药效果最好 | 减肥应该吃什么主食 | 做胃镜之前需要做什么准备 | 鼻烟为什么没人吸了 |
2024年属什么年 | 白球比偏低吃什么补 | 梦见和老公吵架是什么意思 | 柠檬泡蜂蜜有什么功效 | 淋巴净排是什么服务 |
吃什么降糖快hcv8jop8ns4r.cn | 迈之灵治什么病hcv8jop3ns2r.cn | 脸发黄是什么原因bfb118.com | 祈字五行属什么hcv7jop9ns9r.cn | 无赖不还钱最怕什么luyiluode.com |
什么是童子命hcv9jop3ns6r.cn | 什么耳什么腮hcv8jop7ns3r.cn | 白癜风吃什么药hcv9jop2ns7r.cn | 码放是什么意思hcv8jop9ns9r.cn | 月亮为什么会发光youbangsi.com |
通房是什么意思hcv7jop5ns0r.cn | 身上为什么老是痒hcv9jop8ns3r.cn | 靶向是什么意思hcv9jop2ns6r.cn | 鹿几念什么hcv7jop6ns1r.cn | 2008年是什么年hcv8jop9ns2r.cn |
腹部包块是什么样子的hcv9jop6ns0r.cn | 为什么总是想睡觉hcv9jop1ns4r.cn | 嗯是什么意思hcv9jop1ns4r.cn | 运单号是什么gangsutong.com | 蛔虫吃什么药hcv8jop8ns5r.cn |