In a Station of the Metro with Perl and Unicode
Last week I argued that translation isn’t moving words from one language to another — it’s swapping interpreters, and admitting you can’t keep everything, so you choose what to save and call it “faithful.”
You can’t keep everything, so you choose what to save and call it ‘faithful.’
This week I’m stress-testing that claim on a poem that barely contains any words in the first place: Ezra Pound’s In a Station of the Metro — translated into Perl, using Unicode emoji. Because of course.
That’s not just me being unserious (though I am), it’s me being faithful. The poem is Imagism at peak compression: no narration, minimal grammar, two images placed side-by-side, and the reader does the electrical work in the gap.
Emoji are modern pocket-ideograms: tiny pictures that mean by being seen, not conjugated. If Pound wanted English to behave more like ideographic collage, Unicode is basically his afterlife interface.
Meaning happens in the reader
The poem is famously short, but the title does a disproportionate amount of labor. “In a Station of the Metro” is not a label; it’s the frame. It pins the images to fluorescent modernity: underground, crowded, fast. Without it, you get “faces” and “petals” floating in the abstract. With it, you get a specific kind of fleeting perception — faces glimpsed, then gone.
The poem is less a statement than a circuit: two terminals, and your mind completes the connection.
Then Pound refuses to say “like.” That’s the whole daring. The poem doesn’t announce metaphor; it places two images and lets your mind supply the connective tissue.
That’s also why it feels haiku-ish without being a formal haiku: one instant, a sharp cut, two images in tension, and the spark happens off-page — in you.
Here’s the original:
In a Station of the Metro
Ezra Pound
1885 — 1972
The apparition of these faces in the crowd;
Petals on a wet, black bough.
A quick note on declarative thinking
This is why declarative programming languages feel oddly adjacent to Imagism. Prolog wants facts plus inference. Haskell wants expressions plus types (titles are basically type annotations for poems). Coq wants constraints plus proof.
Pound’s poem is almost declarative: here are the images; here is the frame; now infer the relationship. No “do this.” No “therefore.” Just placement.
Which is precisely why translating it into Perl is funny: Perl is happy to be imperative, messy, and operatic. So the challenge becomes: can we make Perl behave like Imagism — image-first, explanation-last?
Poetic code
This is my attempt!
perl -CS -Mutf8 -E '
sub station{} my $metro = exists
#, Ezra
[1885]->[1972];
our @apparitions = map ord, "🌸", "🙈", "🙂";
do { $faces = pop @apparitions or UNIVERSAL->can("petals");
yes: $trees = $faces ^= $_ for @apparitions;
say pack (" U ", $trees) x +@apparitions }
'A small confession: Pound used 14 words in the poem; this uses more — call it ~20 “word-ish” chunks depending how you count. That mismatch is part of the lesson: programming languages demand a minimum amount of machinery to run. The goal here isn’t to win a word-count contest; it’s to preserve the poem’s method: frame, juxtapose, refuse to explain. And of course you could cheat my making it all a string — but that would be ick!
Why sub station is the title, not a header
In the original, the title is effectively a third line: it sets the scene so the two images don’t drift into generic symbolism. In the Perl version, that anchoring becomes executable. I am very proud of it!
sub station{} doesn’t describe a station; it declares one. Better, it declares an empty station — pure frame, no narration. That’s the Imagist bargain in code: do the minimum scene-setting, then stop talking and start placing images.
And my $metro = exists is the same move again: grammar that almost completes itself, then deliberately doesn’t. A metro that “exists,” fragmentarily, the way the poem’s moment exists — briefly, incompletely, and then it’s gone.
#, Ezra
Ok this is just me being cheeky.
It’s author credit, placed where author credit lives in code: a comment.
In Perl, # begins a comment… and in American English, # is called “pound.” So #, Ezra is, literally, Pound, Ezra.
And yes: there are extra Perl-y nuances about skipping over that line that a true Perl connoisseur will appreciate. I’m leaving that joy unspoiled for the trained reader on purpose.
Dates are executable, which is the point
[1885]->[1972];This isn’t just biography stapled on. It’s syntactically real: two array references connected by Perl’s arrow operator. The life becomes a relation: birth → death, written as a pointer.
Which matches the poem’s technique: no explanation, just endpoints and a hinge — and your mind fills the gap.
Ahem it helps that it is needed for that dangling “exists” earlier but we don’t need to go into that. Unless you’re a nerdy perl nerd.
The printed trees matter
The poem’s second line gives you a dark structure (bough) that holds brightness (petals). Your code does a version of that by ending not with explanation, but with output: it prints a Unicode character derived from the “apparitions” and repeats it.
That repetition is important. x +@apparitions doesn’t print a single emblem. It prints a cluster. It gives you a little stand of “trees” on the terminal — something structural and dark-ish that the earlier bright images have collapsed into. In other words: the program doesn’t paraphrase the metaphor; it produces an image that plays the same role as the bough.
One last practical note: when you run that one-liner, it does print “trees” to your terminal — a repeated Unicode glyph (the $trees character), printed x +@apparitions times. If you see boxes or tofu instead, it’s not the poem’s fault; it’s your font refusing to believe in forests.
The interpreter prints. The reader interprets.
Try it yourself
Copy/paste the one-liner exactly as-is:
perl -CS -Mutf8 -E '
sub station{} my $metro = exists
#, Ezra
[1885]->[1972];
our @apparitions = map ord, "🌸", "🙈", "🙂";
do { $faces = pop @apparitions or UNIVERSAL->can("petals");
yes: $trees = $faces ^= $_ for @apparitions;
say pack (" U ", $trees) x +@apparitions }
'Quick Unicode bureaucracy notes:
-Mutf8 treats the source code as UTF-8 (so the emoji literals parse correctly).
-CS makes I/O Unicode-sane (so output isn’t mangled).
-E enables say and modern conveniences.
If you get boxes instead of trees, your terminal font is doing an anti-Imagist interpretive dance.
What this teaches us about translation
This isn’t just poetry wearing a Perl costume. It’s a reminder that translation isn’t “preserve meaning” like a checksum. Translation is choose what you’re being faithful to.
This isn’t just poetry wearing a Perl costume.
Here, fidelity isn’t literal wording. It’s the poem’s method: context carried by the title, metaphor created by juxtaposition, verbs withheld so the reader performs the final computation internally. The Perl version keeps that bargain: it makes the frame executable, turns biography into syntax, and pushes explanation out of the program and into the reader.
At its best, translation isn’t moving sentences across a border. It’s moving a way of thinking into a new set of rules — and discovering what survives when you’re forced to pick what matters.
I have no doubt you can do this better — I’d love to see it.
Ezra Pounds Forests was originally published in Recursive Rhymes on Reason on Medium, where people are continuing the conversation by highlighting and responding to this story.








