Lingua Romana Perligata is basically Perl in Latin.
You think Perl has too much punctuation? It's all gone. Instead you'll need to deal with word endings.
To enjoy Lingua Romana Perligata you need to install it with cpan Lingua::Romana::Perligata
and put appropriate annotation at start of the program. It will run as normal Perl from that point on.
Just a forewarning if you want to try - a lot of examples from documentation just plain don't work.
Hello, World!
#!/usr/bin/env perl
use Lingua::Romana::Perligata;
adnota Salve, Mundus! in Lingua Romana Perligana
dictum sic Salve, Mundus! cis tum novumversum egresso scribe.
$ ./hello.latin
Salve, Mundus!
Step by step:
- I'm using
brew
version of Perl instead of the one bundled with OSX, so#!/usr/bin/env perl
-
use Lingua::Romana::Perligata;
starts the Lingua Romana Perligata mode - we can pass some flags here to enable grammar debugging, and we'll definitely need that at some point - there's no punctuation except
.
at end of sentences - comments start with
adnota
and go until end of the line - there's no quotes, there are a few other ways to create strings instead; documentation suggests
X inquementum
but that seems to work very unreliably depending on what'sX
exactly, which is one of many bugs in the language -
dictum sic ... cis
seems to work a lot better for creating quoted strings - there's no string interpolation, we'll need to concatenate
-
egresso scribe
means "write to standard output" -
tum
means "and then" -
novumversum
means "newline" - so
dictum sic Salve, Mundus! cis tum novumversum egresso scribe
means "write to standard output the stringSalve, Mundus!
and then a newline"
Loop
Let's print numbers 1
to 10
. Sorry, I meant I
to X
.
meis listis unum tum decem conscribementa da.
per quisque in listis fac
sic
hoc comementum tum novumversum egresso scribe
cis.
$ ./loop.latin
I
II
III
IV
V
VI
VII
VIII
IX
X
Step by step:
-
meis listis
ismy @list
and declares a local plural variable - we'd saymeo varo
formy $var
-
da
means "is" -
unum tum decem conscribementa
means1..10
- you can also useI tum X conscribementa
with Roman numerals -
per quisque in listis fac
meansfor each(@list)
-
sic ... cis
is a block of code -
egresso scribe
means "write to standard output" -
hoc
is$_
-
comementum
(beautify) converts the number to Roman numeral form -
tum novumversum
means "and then newline" - so
hoc comementum tum novumversum egresso scribe
means "write to standard output$_
converted to Roman numeral and then a newline"
Greetings
Let's greet a specific person.
meo nomo vestibulo perlegementum da.
nomo morde.
dictum sic Salve, cis tum lacunam tum nomum tum novumversum egresso scribe.
$ ./greetings.latin
Marcus
Salve, Marcus
Step by step:
-
meo nomo ... da
meansmy $name = ...
-
vestibulo
(entrance) meansSTDIN
-
vestibulo perlegementum
means "read line from STDIN"
FizzBuzz
meis listis I tum C conscribementa da.
per quisque in listis fac
sic
fizzo hoc tum III recidementum da.
buzzo hoc tum V recidementum da.
si non fizzum fac sic Fizz egresso scribe cis.
si non buzzum fac sic Buzz egresso scribe cis.
si fizzum atque buzzum fac sic hoc comementum egresso scribe cis.
novumversum egresso scribe.
cis.
It does the FizzBuzz:
./fizzbuzz.latin
I
II
Fizz
IV
Buzz
Fizz
VII
VIII
Fizz
Buzz
XI
Fizz
XIII
XIV
FizzBuzz
XVI
XVII
Fizz
XIX
Buzz
...
Fizz
XCVII
XCVIII
Fizz
Buzz
Step by step:
-
meis listis I tum C conscribementa da
-my @list = (1..100)
-
per quisque in listis fac sic ... cis
-for each (@list) { ... }
-
recidementum
means "modulo" -
fizzo hoc tum III recidementum da
-$fizz = $_ % 3
(these are maybe not the best names, as Fizz should be printed if$fizz
is zero, that is false; and same for$buzz
) -
buzzo hoc tum V recidementum da
-$buzz = $_ % 5
-
si non fizzum fac sic Fizz egresso scribe cis
-if (not $fizz) { print "Fizz" }
. -
si non buzzum fac sic Buzz egresso scribe cis
-if (not $buzz) { print "Buzz" }
. -
atque
meansand
-
si fizzum atque buzzum fac sic hoc comementum egresso scribe cis
-if ($fizz and $buzz) { print Roman($_) }
- if you remove
comementum
it will print ASCII numbers instead of Roman numerals, so you'll get exact match for the traditional FizzBuzz -
novumversum egresso scribe.
- print a newline
Fibbonacci
All right, one more thing, let's define Fibbonacci function.
fibonere
sic
meis numero haec da.
si numerum tum tres praestantiam fac sic redde unum cis.
meo xo numerum tum I demementum fibonementum da.
meo yo numerum tum II demementum fibonementum da.
redde xum tum yum addementum.
cis.
meis listis unum tum XX conscribementa da.
per quisque in listis fac
sic
meo fibo hoc fibonementum da.
fibum egresso scribe.
novumversum egresso scribe.
cis.
$ ./fib.latin
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
Step by step:
- we define the function with
fibonere sic ... cis
- it knows that's function definition by the ending -
meis numero haec da
meansmy ($number) = @_
- the far more grammatical
meo numero haec da
would translate tomy $number = @_
and that means "number of arguments" not "first argument", not like anything here is proper Latin anyway -
redde
meansreturn
-
praestantiam
means less than -
si numerum tum tres praestantiam fac sic redde unum cis
means "if $number is less than 3, return 1" -
meo xo numerum tum I demementum fibonementum da
means$x = fib($number - 1)
-
meo yo numerum tum II demementum fibonementum da
means$y = fib($number - 2)
-
redde xum tum yum addementum
meansreturn $x + $y
Should you use Lingua Romana Perligata?
It's a joke language obviously, but it's not a very well executed joke. Rules are unclear (even if you know some Latin), there are too few examples, many of the examples in documentation don't even work, or break if you do a trivial change. If you use the wrong ending (or one that's correct in real Latin), you get terrible error message, or the program just happily doing something else like treating it as uninitialized variable. I don't find it particularly fun.
I wanted to try it out due to its notoriety in the Perl world, but I wouldn't really recommend it. I had a lot more fun with languages like Asciidots or Whenever.
Another thing - this might look like Latin to someone who doesn't know any Latin, but it's mostly gibberish not following either proper lexicon or proper grammar. It's impressive that it got that far to Latin-like, but it's still not all that close.
Code
All code examples for the series will be in this repository.
Code for the Lingua Romana Perligata episode is available here.
Top comments (0)