Lingua::Romana::Perligata

Tio estas projekto de traduko de la paĝo Lingua::Romana::Perligata -- Perl for the XXI-imum Century far Damian Conway. Tio paĝo nur tradukas la Angla parto al Esperanto. Alia projekto povos adapti ĝin al Esperanta programlingvo.

Resumo edit

Tiu teksto priskribas Perl-a modulo – Lingua::Romana::Perligata – kiu ebligas skribi Perl-ajn programojn latine. Eblaj bazaj ideoj, kiuj eksplikas la kialon de tiela volo, estas provizita kune kun plena superrigardo pri la sintakso kaj semantiko de latinigita Perl. La teksto egale eksplikas la necesajn specialajn font-filtradajn kaj sintaksanalizadajn teknikojn por efike interpreti programlingvon, kies sintakso estas (plejparte) malpozicia.

Enkonduko edit

Kompare kun aliaj lingvoj (ambaŭ modernaj kaj praaj), Angla havas malforta leksik-strukturon. En Angla frazo, plejparte ol gramatika ŝarĝo estas portita per poziciaj indikiloj. Ordono kiel "The boy gave the dog the food" (La knabo donis al la hundo la manĝaĵon) nur havas senson pro konvencio, kie subjekto antaŭas la verbon, kiu antaŭas la nerektan objekton, kiu antaŭas la rektan objekton. Ŝanĝi la ordo – "The food gave the boy the dog" – ŝanĝas la signifon (La manĝaĵo donis al la knabo la hundon).

Plejparte programlingvoj uzas similajn poziciajn gramatikajn indikiloj. La operacio $maximum = $next (maksimumo iĝu sekvanto) ege malsamsignifas ol $next = $maximum (sekvanto iĝu maksimumo). Same, la funkci-vokado push @my_assets, @your_money malsamas ol push @your_money, @my_assets.


Generally speaking, older natural languages have richer lexical structures (such as inflexions for noun number and case) and therefore rely less on word order. For example, in Latin the statements Puer dedit cani escam and Escam dedit puer cani both mean ``The boy gave the dog the food. Indeed, the more usual word order would be reverse Polish, with the verb coming last: Puer cani escam dedit.

Ĝeneraldire, praaj lingvoj havas pli riĉa leksik-strukturojn (kiel infleksio por nom- nombro kaj kazo), kaj pro tio malpli apogas sur vortordo. Ekzemple, la latinaj ordonoj "Puer dedit cani escam" kaj "Escam dedit puer cani" ambaŭ signifas "La knabo donis al la hundo la manĝaĵon". Fakte, la plej kutima vortordo estus la inversa pola, kie la verbo aperas laste: "Puer cani escam dedit".


This flexibility is possible because Latin uses inflexion, not position, to denote lexical roles. The lack of a suffix denotes that the boy (puer) is the subject; the -i ending indicates that the dog (cani) is the indirect object; whilst the -am ending indicates that the food (escam) is the direct object.

Tiu fleksebleco estas ebla ĉar Latina uzas infleksion, ne pozicion, por indiki leksikan rolon. La sensufiksado indikas ke "puer" (knabo) estas la subjekto; la -i finaĵo indikas ke "cani" (hundo) estas la nerekta objekto; kvankam la -am finaĵo indikas ke "escam" estas la rekta objekto.

Por diri "The food gave the boy the dog" (La manĝaĵo donis al la knabo la hundon), oni povus skribi "Puero canem esca dedit". Tie, la -o finaĵo indikas ke la knabo nun estas la nerekta objekto, la finanta -em indikas ke la hundo devenis la rekta objekto, kvankam la -a finaĵo indikas ke la manĝaĵo estas la subjekto.

Iu malpli pozicia programlingvo edit

Estas neniu racio pro ne uzi infleksion en programlingvoj anstataŭ pozicio por indiki leksikarolo. Perl’ jam uzas tiun ideon per necesado de malsamaj prefiksoj por indiki malsamantaj tipoj de leksemoj: $ por indiki skalaron, @ por indiki vico, & por indiki proceduro, ktp.

Fakte, nenial estas ke prafunkcioj, kiel bless aŭ inga formo de map, aŭ êc push, ne povus ebli specifadon de iliajn argumentojn laŭ iu ajn ordo, almenaŭ kiam prefiksoj (aŭ ĝiaj mankoj) indikas neambigue la rolon por ĉiu argumento.

        my $obj = bless 'Classname', \%obj;
        @squares = map @numbers {$_**2};
        push ('Moe', 'Larry', 'Curly') => @stooges;

Plie, pro la funkcinomoj si mem estas neambiguaj laŭ iliaj roloj, nenial nepras, ke ankaŭ iliaj pozicioj estas fiksita:

        @squares = @numbers map {$_**2};
        ('Moe', 'Larry', 'Curly') => @stooges push;

Perl’ jam permesas ete tielan flekciecon per formo de ordonaj modifiloj :

        if ($next > $max) { $max = $next }
        # ...estas la sama ol...
        $max = $next if $next > $max;

Tiu teksto priskribas novan modulon – Lingua::Romana::Perligata –, kiu esploras alivojan sintaksligon por Perl’, per infleksioj apogitaj laŭ klasika latina gramatiko. Tiuj infleksioj antataŭigas funkciojn de normaj Perl-aj $/@/%/& prefiksoj kaj apogas la novan koncepton de semantika rolo, kiu eblas multe pli da libereco en la specifado de funkcioj, operacioj, kaj ilaj respektivaj argumentoj.

Semantikaj roloj edit

Plejparte el Perl-a riĉa varieco de operatoj provizas asignadan taksujon: += por +, .= por ., ||= por ||, ktp. Tiele, proksime duono el Perl-aj operatoroj produktas iun ŝanĝon por unu aŭ pli el iliaj argumentoj. Same, multe el Perl-a prafunkcioj ( push, pop, open, ktp.) modifas iun el iliaj argumentoj.


Ambaŭkaze, la modif-nepra operacianto aŭ argumento estas indikita pozicie – estas ĉiam la antaŭa operaciato aŭ la unua argumento. Plie, tiu argumento estas ĉiam implicite enreferencita, kiel se ĝi havus \$ aŭ \@ prototipo.

Tiele, operaciatoj kaj argumentoj havas unu el du la semantikaj roloj: celo aŭ dateno. Iu celo estas provizita per referenco, kaj estas modifita dum la taksado de operacio aŭ funkcio. Dateno estas provizita per taksigo (kvankam tiu taksigo mem povas esti iu refereco) kaj ili kontrolas aŭ "hejtas" la modifo de la celo.


In this model, it is possible to recast almost all built-in Perl functions and operations as procedures of exactly two arguments: a single reference (the target) and a single list (the data):

Laŭ tiel modelo, estas ebla etranstipi kvazaŭ ĉiuj pra-Perl-aj funkcioj kaj operacioj kiel proceduro kun ekzakte du argumentoj: iu unuopa referenco (la celo) kaj unu unuopa listo (la dateno):


        _sysopen( -target=>\*FILE, -data=>[$filename,$mode,$perms] );

        _push( -target=>\@stooges, -data=>['Moe', 'Larry', 'Curly'] );

        _pop( -target=>\@stack, -data=>[] );
       
        _assign( -target=>\$max, -data=>[$nextval] )
                if _num_less_than( -target=>undef, -data=>[$max, $nextval] );

        _assign( -target=>\$now, -data=>[ _time(-target=>undef, -data=>[]) ]);

Note that, for many functions, either or both of these two standard arguments may be null.

Notu ke por multaj da funkcioj, ajna el la du normaj argumentoj – posible ambaŭ – povas esti sentaksiga.

Mapado de la modelo al Latino edit

Por mapi tiun simpligitan modelon de Perl’ al iu infleksia sintakso, estas nepre elekti infleksan skemon, kiu diferencigas la tri komponantojn el ĉiu funkcio: nomo, celo kaj dateno.

 Pri la temo de la ekzemplo

Ekzemploj de tiu sekcio kaj aliaj ekzemploj pliposte aludas pri la filmo Il buono, il brutto, il cattivo., esperante: La bonulo, la aĉulo, la fiulo.

Konsideru la asignadon de listo al vico:

        @gunslingers = ( @good, @bad, $Ugly );

Laŭ notacio de semantika rolo, tio estas:

        _assign( -target=>\@gunslingers, -data=>[@good, @bad, $Ugly] );
        # laŭvorte _asignu( -celo=>\@pafuloj, -dateno=>[@bonulo, @aĉulo, $Fiulo] );

Anglige, tio estus esprimita:

Assign gunslingers goodies and baddies and Mr Ugly.


Esperante, tio estus esprimita:

Asignu al pafiluloj bonularon kaj aĉularon kaj fiulon


The imperative verb ``assign specifies the action to be performed. The noun ``gunslingers specifies the indirect (or dative) object of the action. In other words, it is the recipient of the effect of the action -- the target. The phrase ``goodies and baddies and uglies specifies the direct object of the action -- that which is to be assigned. In other words, the data. The direct and indirect objects are only distinguished by the order in which they appear: indirect object first.

La imperativa verbo assign (volitiva verbo asignu en Esperanto) specifas la efektivigan agon. La nomo gunslingers (pafiluloj) specifas la nerekta (aŭ dativa[noto 1]) objekto de la ago. Alivortige, ĝi estas la ricevonto de la efektivigo de la ago – la celo. La frazparto goodies and baddies and uglies specifas la rekta objekto de la ago – tiu, kiu estas asignota. Alivorte, la dateno. La rektaj kaj nerektaj objektoj estas diferencigita nur per eldirordo: la nerekta objekto antaŭ la rekta.


La Angla versio ankaŭ uzas la pluralan infleksion por goodies kaj baddies, tre simile al Perl-a uzado de la prefikso @ por indiki la oblecon de implikitaj objectoj[noto 2].

Latine, la samaj instrukcioj estus (loze) vortigita:

Bonos tum malos tum Foedum pugnatoribus da.

Tie, la rektaj objektoj estas bonos ("la bon(ul)ojn", akuzativa pluralo), malos ("la aĉ(ul)ojn", akuzativa pluralo) kaj Foedum ("fiulo", akuzativa singularo). La nedirekta objeto estas pugnatoribus ("al batalantoj", dativa pluralo) kaj la verbo estas da ("donu", prezenca imperativo). La konjunkcio tum signifas kaj tiam/tiame, kaj transdonas la signifon de la ordo de la rektaj objektoj.

Malsame al la Angla -s finaĵo, la diversa latina sufiksoj (-os, -um, -ibus) specifas ambaŭ la nombro kaj la rolo (aŭ kazo) de la inflekcita nomo. Tio signifas ke la pozicio de la diversaj objektoj, kaj fakte de la verbo mem, ne gravas. La sama frazo povus egale esti eldirita:

Pugnatoribus da bonos tum malos tum Foedum.

Da bonos tum malos tum Foedum pugnatoribus.

Semantike, ĉiuj el tiuj variaĵoj (kaj ajn aliaj permutaĵoj de la verbo kaj ĝiaj objektoj) estas ekvivalentaj al la sama modelo pri celo/dateno:

        _assign( -target=>\@gunslingers, -data=>[@good, @bad, $Ugly] );

kaj sekve estas ekvivalentaj aj la norma Perl’:

        @gunslingers = ( @good, @bad, $Ugly );

Tiel estas ebla skribi Perl-programoj Latine.

Lingua::Romana::Perligata edit

The Lingua::Romana::Perligata module provides the necessary translation services to allow Perl programs to be written using a syntactic binding (perligatus) modelled on the ancient lingua Romana. To distinguish it from regular Perl, this binding -- and any code specified in it -- is henceforth referred to as ``Perligata.

La Lingua::Romana::Perligata modulo provizas necesaj tradukilaj servoj por ebli skribadon de Perl-programoj per sintaksa bindado (perligatus), modelita laŭ la praa lingua Romana. Por diferencigi ĝin el la regula Perl’, tiu bindo – kaj ajna kodo specifita en ĝi – estas nun referencita kiel Perligata.

Variantoj edit

Por simpligi la kompleksegajn regulojn de deklinacio kaj konjugacio, kiuj rulas infleksiojn en Latino, Perligata traktas ĉiujn uzant-difinitajn skalarajn kaj vicajn taksujojn kiel neŭtraj subsantivoj de dua deklinacio – singularoo por skalaroj, pluraloo por vicoj. Tiu etigas la nombron da memorendaj sufiksoj.

Haktabeloj kreas malfacilecon en Perligata, ĉar al Latino mankas evidentan manieron por diferencigi tiujn "pluraloajn" taksujojn el vicoj. La solvo adoptita estas foriri de la dua deklinacio kaj reprezenti haktabelojn kiel viraj substantivoj el la kvara deklinacio.

Sekve, la tipo kaj rolo de ĉiuj tipaj taksujoj estas specifita per ilia nombro kaj kazo, kiel indiktia en Tabelo 1.

Kiam eroj de vicoj kaj haktabeloj estas referencita rekte en Perl’, la prefikso de la enhavanto ŝanĝas de @ aŭ % al $. Do malsurprize Perligata ankaŭ uzas malsamajn infleksiojn por diferencigi tiujn kazojn.

Indecadaj operacioj kiel $array[$elem] (laŭvorte $vico[$ero]) aŭ $hash{$key} (laŭvorte $haktabelo{$ŝlosilo}[noto 3]) povus esti tradukita kiel elem of array (ero de vico[noto 4]), aŭ key of hash (ŝlosilo de haktabelo). Tiu sugestas ke kiam vicoj kaj haktabeloj estas indecita, iliaj nomoj vortigendus per genitiva (aŭ posesiva) kazo. Operacioj de Mult-nivela indico – $array[$row][$column] (laŭvorte $tabelo[$linio][$kolumno]) – signifas "kolumno el linio el tabelo", do la unua indicita taksujo ankaŭ devas esti vortigita per genitivo. Tabelo 1 egale sumeras tiun rolon.

Tabelo 1: Perligataj taksujoj
Perligata Nombro Kazo Deklinacio Perl Rolo
nextum akuzativo singularo dua $next skalara dateno
nexta akuzativo pluralo dua @next vica dateno
nextus akuzativo pluralo kvara %next haktabela dateno
nexto dativo singularo dua $next skalara celo
nextis dativo pluralo dua @next vica celo
nextibus dativo pluralo kvara %next haktabela celo
nexti genitivo singularo dua [$next] indicita skalara
nextorum genitivo pluralo dua $next[] indicita vico
nextuum genitivo pluralo kvara $next{} indicita haktabelo

Aliadire, skalaroj estas ĉiam singularaj substantivoj, vicoj kaj haktabeloj estas ĉiam pluraloj (sed de malsamaj deklinacioj), kaj la kazo de la substantivo specifas ĝian rolon: akuzativo por dateno, dativo por celo, genitivo kiam indeksita.

La komuna interpunkciaj taksujoj $_ kaj @_ estas specialaj kazoj. $_ estas ofte la taksigo laŭ implica konsidero[noto 5] (ekzemple, modelrekono, aŭ for (por) iteracio) kaj do estas vortigita kiel "ĉi tiu aĵo": hoc en la datena rolo, huic en la cela rolo, huius kiam indicita.

Simile, @_ estas implice la listo de aĵoj, kiuj estas pasitaj al proceduro, kaj do estas vortigita kiel "ĉi tiuj aĵoj": haec en la datena rolo, his en la cela rolo, horum kiam indicita.

Aliaj interpunkciaj taksujoj prenas la latina formo de iliaj English.pm-aj ekvivalentoj (vidu aldono A), ofte kun ampleksa poezia licenco. Ekzemple, en Perligata, $/ estas vortigita kiel ianitorem (pordisto).

La numeralaj taksujoj – $1, $2, ktp – estas vortigitaj kiel sintezaj kunmetaĵoj: parprimum (parigo unua), parsecundum (parigo dua), ktp. Kiam indicita, ili uzas genitivajn formojn: parprimi (de parigo unua), parsecundi (de parigo dua), ktp. Ĉar ili ne povas esti rekte ŝanĝita kiel celo de ago, ili ne havas dativajn formojn.

my, our, kaj local edit

En Perligata, la modifilo my estas vortigita – sensurprize – per la unuaj personoj de posedaj pronomoj:

  • meo provizas skalaran situacion;
  • meis provizas listan situacion.

Notu ke la modifilo estas ĉiam aplikita al dativo, kaj tiale estas mem deklinaciita per tiu kazo. Tiel:

        meo varo haec da.                # my $var = @_;
        meis varo haec da.               # my ($var) = @_
        meis varis haec da.              # my @var = @_;

Simile la modifilo our estas vortigita kiel nostronostris, laŭ dezirita situacio.

La Perl-a modifilo local estas locolocis en Perligata:


        loco varo haec da.               # local $var = @_;
        locis varo haec da.              # local ($var) = @_
        locis varis haec da.             # local @var = @_;


Ti estas feliĉega: loco ne nur estas la Latina termo de kie la vorto local devenas, ĝi ankaŭ signifas "anstataŭ de" (kiel en "in loco parentis"). Tiu signifo estas multe pli apuda al la efektiva konduto de la modifilo local, tio estas nedaŭre instali novan leksemaranon anstataŭ de la nuna.

Proceduroj edit

Funkcioj, operaciiloj, kaj uzant-difinitaj proceduroj estas prezentitaj kiel verboj aŭ, en kelkaj situacioj, verbaj nomoj. Tie, la infleksio de la verbo determinas ne nur ĝian semantikan rolon, sed ankaŭ ĝian vokadan situacio.

Uzant-difinitaj proceduroj estas la plej simpla grupo. Por eviti ambigueco, ili ĉiuj estas traktita kiel verboj de la tria konjugacio. La tabelo 2 ilustras la variajn uzadojn por la uzant-difinita proceduro count() (nombri).


Tabelo 2: Perligataj proceduroj
Perligata Nombro Kazo Modo ktp Perl Rolo Situacio
countere - - infinitivo - sub count difinado -
counte singularo - imperativo - count() vokado vakua
countementum singularo akuzativo - taksaĵo count() vok-dateno skalara
countementa plurala akuzativo - taksaĵo count() vok-dateno listo
countemento singularo dativo - taksaĵo count() vok-celo skalaro
countementis plurala dativo - taksaĵo count() vok-celo listo

La uzado de infinitivo kiel procedura difino estas evidenta: accipere dirus al Perligata kiel "akcepti" spernere kiel "rifuzi" (malakcepti). Do countere specifas kiel "nombri".

La uzado de imperativo kiel vakua situacio estas ankaŭ klara: accipe komandas al Perligata "akceptu!", sperne diras "rifuzu!", kaj counte petas "nombru!" al ĝi. Ĉiukaze, iu instrukcio estas donita (kaj en vakua situacio egale, do neniu retrobabilado estas atendita).

Pritrakti skalarajn kaj listajn situaciojn estas pli defia. La responda Latino devas ankaŭ havi verbecojn, kiel ago estas elfarita je objektoj. Sed ĝi ankaŭ devas havi la trajtoj de nomo, ĉar la rezulto de la vokado estas uzonta kiel objekto (tio estas, celo aŭ dateno) de iu alia verbo. Feliĉe, Latino havas riĉa sortimento da verbaj nomoj – multe pli ol Angla – kiuj povus okupi tiun rolon.

Ĉar estas la rezulto de la procedura vokado kiu interesas tie ĉi, la plej bona solvo estis uzi la -ememtum sufikson, kiu specifas la (singulara, akuzativa) rezulto de iu ago. Tiu kongruas al la rezulto de proceduro vokita laŭ skalara situacio kaj uzita kiel dateno. Por iu listdatena situacio, la plurala sufikso -ementa estas uzita, kaj, por celoj, la dativaj formoj estas uzitaj: -emento kaj -ementis. Notu ke tiuj finaĵoj estas plene kohera kun tiuj de la tabelo 1.

Senpraaj funkcioj kaj operaciiloj edit

Senpraaj funkcioj kaj operaciiloj eblus konformiĝi samskeme al la proceduroj. Ekzemple shift (forŝovi) povus esti shifte laŭ vakua situacio, shiftementa kiam uzita kiel dateno laŭ vica situacio, shiftemento kiam uzita kiel celo laŭ skalara situacio, ktp.

However, Latin already has a perfectly good verb with the same meaning as shift: decapitare (``to behead). Unfortunately, this verb is of the first conjugation, not the second, and hence has the imperative form decapita, which makes it look like a Perligata array in a data role.

Tamen, Latino jam havas perfekte taŭgan samsignifan verbon kiel shift: decapitare (senkapigi). Malfortune, tiu verbo klasifikiĝas en la unua konjugacio, male la unua, kaj tial havas la imperativan formon decapita, kiu faras ĝin aspekti kiel Perligata vico laŭ datenrolo.

Trajtapartigo neniam estis la plej grava skemkriterio de Perl, do Perligata laŭkutime deteni sin de banala kohereco, favore al estetikoj. Ĉiuj bazvortoj de Perligata – inkluzive nomoj de funkcioj kaj operaciiloj – estas tial specifita kiel korektaj Latinaj verboj per tia ajn taŭga konjugacio, kiu estas necesa. Tabelo 3 montras sortimento el tiuj, dum apendico A enhavas la plena listo de bazvorto de Perligata.

Tabelo 3: Sortimento el prafunkcioj kaj operaciiloj de Perligata
Operaciilo / funkcio Signifigita kiel Vakua situacio Skalara dateno Lista dateno
+ "aldoni" (adicii) adde addementum addementa
= "doni" da damentum damenta
. "kunligi" sere serementum serementa
.. "varbiĝi" (aniĝi) conscribe conscribementum conscribementa
shift "senkapigi" decapita decapitamentum decapitamenta
push "stapli" cumula cumulamentum cumulamenta
pop "malstapli" decumula decumulamentum decumulamenta
grep "ventumi" vanne vannementum vannementa
print "skribi" scribe scribementum scribementa
write "subskribi" subscribe subscribementum subscribementa
die "morti" mori morimentum morimenta

Notu, tamen, ke kohereco ne estis tute forlasita. La retroformadoj de infleksioj por skalaraj kaj listaj situacio estas tute regula, kaj kohera kun tiuj de uzant-difinitaj proceduroj (Tabelo 2).

Kelkaj prafunkcioj de Perl – pos, substr, keys – estas uzebla kiel transtaksaĵo. Tio estas, ili povas esti celo de iu alia ago (tipe, de asignado). En Perligata, tiaj kazoj estas skribita laŭ dativa singularo (ĉar la transtaksaĵo estas ĉiam skalara). Notu ankaŭ ke ĉar asignado al transtaksaĵa funkcio modifas la unuan argumenton, la argumento estas ankaŭ celenda, kaj tial estas ankaŭ dative skribenda.

Tiel:

        nexto stringum reperimentum da.     # $next = pos $string;
        nextum stringo reperimento da.      # pos $string = $next;
        inserto stringum tum unum tum duo excerpementum da.
                                    # $insert = substr($string,1,2);
        insertum stringo unum tum duo excerpemento da.
                                    # substr($string,1,2) = $insert;
        keyis hashus nominamentum da        # @keys = keys %hash;
        keya hashibus nominamento da        # keys %hash = @keys;

Kodingoj kaj ŝaltestriloj edit

Alkreskadaj lingvoj ĝenerale uzas iu parenteza aparato – kiel krampoj, komoj, aŭ (kiel ĉi tie) strekoj – por grupi kaj separi kolektojn da vortgrupo aŭ eldiro.

Iu tia meĥanismo estus evidenta elekto por signi kodingojn de Perligata, sed ekzistas pli estetike plaĉa solvo. La Perl-aj limigiloj de kodingoj ({}) havas du apartaj dezirindaj ecoj: ili estas unuope kurtaj, kaj ĉiomope simetria. Estis konsiderita grava ke estis retenita tiuj ecoj en Perligata

Latine, la vorto sic signifas tiel. Feliĉe, ĝia retrolitervica cis havas la antoniman signifon (inter aliaj) "ĝis tie, ĝis tiu limo". La allogeco de tia speco de vortludo estante nerezistebla, Perligata limigas kodingojn de ordonoj per tiuj vortoj. Ekzemple

        sic                                     # {
            loco ianitori.                      #   local $/;
            dato fonti perlegementum da.        #   $data = <DATA>;
        cis                                     # }

Ŝaltpeliloj de Perligata estas vortigitaj kiel kondiĉa takseblaĵo, kiel ĝi okazas Latine, en Angla kaj Perl-e. Kaj kiel laŭ tiuj lingvoj, ili povas antaŭi aŭ sekvi la kodblokojn ili pelas. Tabelo 4 resumas la ŝaltpelioj ke Perligata provizas.

Tabelo 4: Ŝaltpeliloj de Perligata
Perligata Perl Traduko
si … fac if se … faru
nisi … fac unless krom se … faru
dum … fac while dum … faru
donec … fac until
per (quisque) … in

… fac

for(each) por (ĉiuj) … el … faru
posterus next antaŭsekvante (antaŭ(cikl)sekvŝalte)
ultimus last laste (ĉeŝalte, eksterŝalte)
reconatus redo refare (reciklŝalte)
confectus continue sekvante ((cikl)sekvŝalte)

La trenaĵo fac (faru) estas la imperativa formo de facere (fari) kaj estas uzita kiel limigilo de la pelordona kondiĉo.

La elekto de dum kaj donec estas plene arbitra, ĉar Latino ne distingas while (dum) kaj until (ĝis) kiel abstraktoj sammaniere ol Angla faras. Dum kaj donec ambaŭ signifas dum kaj ĝis, kaj Latino fidas situacion por distingi ilin. Tio estas maloportuna por Perligata, do ĝi ĉiam traktas dum kiel while (dum) kaj donec kiel until (ĝis). Tiu elekto estas farita por favori per la plej kurta termino la plej oftan tipon de iteraciilo.


La elekto de confectus por continue celas transdoni la funkcion de ŝaltpelilo, prefere ol la laŭvorta signifo de la Angla origina. Tio estas, continue-a kodingo specifas kiel kompletigi conficere ciklilon.

Perligata only supports the pure iterative form of for(each), not the C-like three-part syntax. Because:

Perligata nur apogas la puran ciklilan formo de for(each), ne la tripartan sintakson simila al C. Ĉar:

for $var (@list) 

signifas "por ĉiuj taksujo el la listo…", la skalara taksujo devas esti en akuzativo (ĉar ĝi estas regita per "por"), kaj la listo devas esti en ablativo (kiu indikas inkluzivon). Fortune, en la dua deklinacio, la fleksio por ablativo estas ekzakte la sama ol dativoj, donanta:

 per quisque varum in listis...

Tio signifas ke neniuj ekstraj fleksioj necesas lernadon nur por uzi per-a ciklilo. Pli bone, la listo (listis ŝajnas kiel Perligata vica taksujo laŭ celrolo, kio estas klare la kazo, ĉar ĝia enhavo povas esti modifita ene de ciklingo.

Diversaj aliaj trajtoj edit

Nombroj edit

Nombraj rektaksaĵoj en Perligata estas vortigitaj per Romanaj ciferoj – I, II, III, IV...XV...XLII, ktp. Tamen, la unuaj dek nombroj ankaŭ estas nomebla laŭ unum, duo, tres, quattuor, quinque, sex, septem, octo, novem, decem. Nulo, por kiu estas neniu Latina nombro, estas vortigita per nullum (neniu). Nihil (nenio) eble estus pli proksima vortigado, sed ĝi estas senfleksia kaj tial nedistingebla laŭ akuzativo kaj genetivo.

Kiam nombra rekttaksaĵo estas uzita por indica operacio, ĝi estendas numero (unua el, dua el, ktp). La unua dek nombroj estas nomita: primum, secundum, tertium, quartum, quintum, sextum, septimum, octavum, nonum, decimum (akuzative, kompreneble, ĉar ili ĉiam estas dateno). Numeroj pli granda ol dek estas prezentitaj per iliaj respondaj nombroj, kun sufikso -imum : XVimum (15a) XLIIimum (42a), ktp. Analoge, numera nulo estas vortigita per invitita formo nullimum.

En mult-nivela indica operacio, numeroj povas necesi la uzadon de genetivo: nulli, primi, secundi, tertii, quarti, …, XVimi, …, XLIIimi, ktp.


Ekzemple

 $unimatrix[1][3][9][7];

estus:

        septimum noni tertii primi unimatrixorum
        # seventh of ninth of third of first of unimatrix

Note that the order of the genitives is significant here, and is the reverse of that required in Perl.

Notu que la ordo de la genetivoj estas signifa tie ĉi, kaj estas la inversa de tiu, kiun uzas Perl’.

Ŝlosonaj nombroj esprimiĝas kiel Latina frakcioj en Perligata:

        unum quartum                    # 0.25
        MMMCXLI Mimum                 # 3.141

Notu ke la numeranto ĉiam estas iu povo kaj la nomanto estas iu numero (kvarono, 31,411,000ono). Teknike, ambaŭ devus esti en la ina genro – una quarta, MMMCXLI Mimae – sed tiu Latina regulo ne estas eldevigita en Perligata

Ĉenoj edit

Classical Latin does not use punctuation to denote direct quotation. Instead the verb inquit (``said) is used to report a direct utterance. Hence in Perligata, a literal character string is constructed, not with quotation marks, but by invoking the verbal noun inquementum (``the result of saying), with a data list of literals to be interpolated. For example:

Klasika Lation ne uzas interpunkcio por indiki rektan citadon. Anstataŭe la verbo inquit (diras) estas uzita por raporti rektan eldiron. Tial en Perligata, ĉeno de rekttaksaĵa signo estas konstruita, ne per citmarkoj, sed per alvokado la verba nomo inquementum (eldirigo), kun datena listo de interpolendaj rekttaksaĵoj. Ekzemple

        print STDOUT 'Enter next word:';

devenas:

 Enter tum next tum word inquementum tum biguttam egresso scribe.

Note that the arguments to inquementum are special in that they are treated as literals. Punctuation strings have special names, such as lacunam (``a hole -> space), stadium (``a stride -> tabspace), novumversum (``new verse -> newline), or biguttam (``two spots -> colon).

Notu ke la argumentoj de inquementum estas specialaj pro tio ke ili estas traktitaj kiel rekttaksaĵoj. Interpunkciaj ĉenoj havas specialaj nomoj, kiel lacunam (breĉo, truo, tio estas spaceto), stadium (stadiono, paŝego, tio estas tabo), novumversum (nova verso, tio estas nova linio), biguttam[1] (du makuloj: tio estas du punkto).

Perligata ne provizas meĥanismo de interpolitaj citadoj. Anstataŭe, taksujoj devas esti ligitaj al iu ĉeno . Do:

        print STDERR "You entered $word\n";


devenas:

 You tum entered inquementum tum wordum tum novumversum oraculo scribe.

Referencoj edit

Por krei novan referencon al taksujo kun datena rolo (taksujoj kun cela rolo estas aŭtomate elreferencita), la taksujo estas enkondukita kun la prepozicio ad (al). Por krei referenco al proceduro, la asociita verbo estas infleksiita kun la sufikso -torem ("iu, kiu…", -ul-), por produkti la respondan agentecnomo.

ekzemple


 val inquementum datuum ad datum da. # $dat{val} = \$data;
        arg inquementum datuum ad arga da.        # $dat{arg} = \@arg;
        act inquementum datuum functorem da.      # $dat{act} = \&func;

A special case of this construction is the anonymous subroutine constructor factorem (``one who does...), which is the equivalent of sub {...} in Perl:

Iu speciala kazo de tiu konstruado estas konstruiloj de sennoma proceduroj factorem ("iu kiu igas…"), kiu ekvivalentas Perl-an sub {} in:

 anonymo da factorem sic haec mori cis. # $anon = sub { die @_ };

Kiel en Perl’, tiel proceduroj povas esti alvokita per ligi vokadan specifilon al la nomo de la taksujo, kiu entenas la referencon:

 anonymume nos tum morituri inquementum. # &$anon('Nos morituri');

Notu ke la taksujo kiu entenas la referenco (anonymum) estas uzita kiel dateno, do ĝi estas nomita akuzative.

En kelkaj kazoj, kie iu reference de proceduro povas esti celita de iu ago, la dativa sufikso (-tori estas uzita anstataŭe:


 benedictum functori classum. # bless \&func, $class;
        benedictum factori sic mori cis classum.  # bless sub{die}, $class;

Duvalenta logiko edit

Perl's logical conjunctive and disjunctive operators come in two precedences, and curiously, so do those of Latin. The higher precedence Perl operators -- && and || -- are represented in Perligata by the emphatic Latin conjunctions atque and vel respectively. The lower precedence operators -- and and or -- are represented by the unemphatic conjunctive suffixes -que and -ve. Hence:


Perl-aj logikaj operaciiloj de konjunkcio kaj disjunkcio proviziĝas laŭ du antaŭeco, kaj kurioze, ĝi ankaŭ estas la kazo en Latino. En Perligata la plej antaŭecaj operaciiloj de Perl’ – && kaj || – estas prezentitaj per la emfazaj Latinaj konjunkcioj atque vel respektive. La malpli antaŭecaj operaciiloj – and kaj or – estas prezentitaj per malemfaza konjunkciaj sufiksoj -que -ve. De tie ĉi:


	resulto damentum foundum atque defum. # $result = $found && $def;
        resulto damentum foundum defumque.       # $result = $found and $def;
        resulto damentum foundum vel defum.      # $result = $found || $def;
        resulto damentum foundum defumve.        # $result = $found or $def;

Notu ke, kiel en Lation, la sufikso de la malemfaza konjunkcio ĉiam estas almetita al la unua vorto post la punkto kie la konjunkcio aperus Angllingve. Tiel:

        $result = $val or max($1,$2);


estas vortitigita kiel:

 resulto damentum valum parprimumve tum parsecundum maxementum.


Ĝustaj latinaj komparoj estus hida en Perligata, ĉar ili necesas ilia unua argumento esti esprimita nominative kaj ili mem estus indikative esprimenda. Tiu, evidente, eĉ pli bonigus la eksterloka de la lingvo, permisanta:

 si valus praecedit datum... # if $val < $dat...
        si praecedit datum valus...              # if $val < $dat...
        si datum valus praecedit...              # if $val < $dat...

Malfortune, tio ankaŭ enkondukas alian infleksian kazaron kaj alian verban sufikson. Plimise, tio signifus ke la nomaj sufiksoj ne plu estas sensdistingebla. Laŭ la dua deklinacio, la nominativa pluralo finas kun la sama -i ol la genitiva singularo, kaj la noinativa singularo finaĵo (-us) estas la sama ol la sufikso de akuzativa pluralo por la kvara deklinacio. Do, se nominativo estus uzita, skalaroj ne plu ĉiam esti distingita el vicoj aŭ haktabeloj, escepte laŭ situacio.

To avoid these problems, Perligata represents the equality and simple inequality operators by three pairs of verbal nouns as described in Table 5.

Por eviti tiuj problemoj, Perligata prezentas operaciilojn de egaleco kaj simpla neegaleco per tri paroj de verbaj nomoj kiel priskribita en tabelo 5.


Tabelo 5: operaciiloj de komparo de Perligata
Perligata Signifo Perl’
aequalitam "egaleco (ol...)" ==
aequalitas "egalecoj (ol...)" eq
praestantiam "antaŭeco (ol...)" &lt;
praestantias "antaŭecoj (ol...)" lt
comparitiam "komparo (ol...)" &lt;=>
comparitias "komparoj (ol...)" cmp

Ĉiu opeciilo prenas du datenajn argumetojn, kiuj ĝi komparas:

        si valum tum datum aequalitam...               # if $val == $dat...
        si valum praestantias datum...                 # if $val lt $dat...
        digere sic aum comparitiam bum cis lista.      # sort {$a<=>$b} @list;


Notu ke kvankam digere ŝajnas kiel infinitivo (tio estas, iu difino de proceduro), ĝi fakte estas imperativo de digerere (ordi, klasi, distribui) kaj estas la bazvorto de Perligata por sort. La filozofiemuloj povus elekti al pensi ke la okaziga konfuzo estas formo de Tuaj Justico vizitanta tiujn, kiuj uzas sort en vakua situacio.

La efektoj de aliaj komparaj operaciiloj – >, <=, !=, ne, ge, ktp – estas atingita per taŭga ordado de la du argumentoj kaj kombinado kun la operaciilo de logika negacio non:


 si valum datum non aequalitam... # if $val != $dat...
        si datum praestantiam valum...           # if $val > $dat...
        si valum non praestantias datum...       # if $val ge $dat...

Pakoj kaj klasoj edit

La bazvorto de Perligata por deklari iun pakon estas domus, laŭvorte "la domo de". Tiele, la nomo de la klaso sekvas la bazvorto kaj estas traktita kiel iu rekttaksaĵo; kiel se ĝi estus datena argumento de inquememtum.


Por plenspecifi taksaĵon aŭ proceduron kiel enhavanta al pako, la prepozicio intra (ene) estas uzita. Por voki proceduron kiel metodo de specifa pako (aŭ de iu objekto), la prepozicio apud (egale apud esperante sed la latina vorto havas egale aliaj signifoj) estas uzita.


La Perla funkcio bless estas benedice (benu) laŭ Perligata, sed kvavaŭe nevarie uzita laŭ skalara datena rolo benedictum.

Tiele:


        domus Specimen.                        # package Specimen;

 
        newere                                      # sub new
        sic                                         # {
            meis datibus.                           #   my %data;
            counto intra Specimen
                postincresce.                       #   $Specimen::count++;
            datibus nullum horum benedictum.        #   bless \%data, $_[0];
        cis                                         # }
        printere                                    # sub print
        sic                                         # {
            modus tum indefinitus inquementum mori. #   die 'method undefined';
        cis                                         # }

        domus princeps.                             # package main;

        meo objecto da                              # my $object =
                newementum apud Specimen.      #       Specimen->new;

        printe apud objectum;                       # $object->print;

Kunigi ĉiujn – greka ciklsolvilo per Latino edit

La kribrilo de Eratosteno estas el la plej maljunaj bonkonitaj ciklsolviloj. Kiel romana kulturo plejparte estis prunteprenita de grekoj, estas eble taŭga ke la tute unua Perligata programo egale sekvas tiun kutimon.

        #! /usr/local/bin/perl -w

 
        use Lingua::Romana::Perligata;

 
        maximum inquementum tum biguttam egresso scribe.
        meo maximo vestibulo perlegamentum da.
        da duo tum maximum conscribementa meis listis.

 
        dum listis decapitamentum damentum nexto
            fac sic
                nextum tum novumversum scribe egresso.
                lista sic hoc recidementum nextum cis vannementa da listis.
            cis.

La ordono use Lingua::Romana::Perligata kaŭzas ke la cetero de la programo estas tradukita al la sekvanta Perla kodo:

        print STDOUT 'maximum:';                  
        my $maxim = &lt;STDIN>;                     
        my (@list) = (2..$maxim);

 
        while ($next = shift @list)             
            {
                print STDOUT $next, "\n";
                @list = grep {$_ % $next} @list; 
            }

Notu ke, en la tute lasta Perligata ordono ( lista sic hoc...da listis), la uzado de infleksio distingas la taksujon @list, kiu estas grepita (lista) de la taksujo @list kiu estas asignita (listis) , kvankam ĉiu estas al mispozicia fino de la ordono, kompare ol la Perla versio.

La realigo de la modulo Lingua::Romana::Perligata edit

La modulo meme estas vera simpla ekzemplo de fontfiltrilo, kaj uzas la modulon Filter::Util::Call fare de Paul Marquess. La perligata sintaksanalizilo estas alvokita per unuopa proceduro, kiu estas vokita kiel filtrilo por la fontokodo, kiel priskribita en la sekvantaj sekcioj.

Filtri edit

La modulo Filter::Util::Call amplekse faciligas la taskon de fontkodo prefilrado. Filtrila modulo kiu uzas Filter::Util::Call simple aldonas la ordono filter_add({}) al ĝia inporta proceduro.

Tiam, kiam la filtrila modulo ĝi-mem estas uzita en iu ajn kodo, Filter::Util::Call serĉas en la filtrantan modulon por proceduro nomita filter (filtru), kiu ĝi vokas. Tiu filtra proceduro povas aliri al la fontkodo ekde la dosiero kiu vokis la filtrantan modulon, kaj povas ŝanĝi tiun kodon taŭge. Kiu ajn ĉeno estas en la taksujo $_ kiam la filtrila proceduro reŝaltas, tiun estas provizita al la tradukilo kiel fina programfonto.

Distermaperigado edit

Por Lingua::Romana::Perligata la filtrila proceduro konformas al la kutima strukturo de gramatiko-baza sintaks-analizilo/tradukilo. Ĝi unue alvokas distermigilon por pecigi la Perligata fontkodo al ĉeno de termoj.

La distermigilo estas vere simpla: ĝi nur disigas la fonto po blankspaco aŭ po punkto, kaj sekve klasas ĉiu vorto en la taksaĵa listo per kongrui ĝin kun serio de skemoj kun kreskaj ĝeneraleco. Ĉeftermoj estas testitaj unue, sekvitaj de nombroj kaj ciferoj, interpunkciaj taksujoj, uzant-difinitaj funkciojn en skalara kaj lista situacioj, uzant-difinitaj proceduroj en vakua situacio, taksujoj en celrolo (t.e. dativoj) kaj fine taksujoj en datenrolo (akuzativoj).

Dum ĉiu vorto estas klasita, ĝi egale estas konvertita al objekto de la kongrua termtipo – ĉeftermo, nombro, taksujo, proceduro, ktp. Ĉiu objekto memoras la origina vorto (leksemo) kaj ĝia kongrua Perla konstruaĵo. Ekzemple, la ĉeno 'dum maxo maxa maxamentum damentum' liveri listan ekvivalenton al:

        (
            bless({ raw=>'dum',        perl=>'while' }, 'Conditional'     ), # Kondicionalo 
            bless({ raw=>'maxo',       perl=>'$max'  }, 'Noun_Dative'     ), # Noma_Dativon
            bless({ raw=>'maxa',       perl=>'@max'  }, 'Noun_Accusative' ), # Noma_Akuzativon
            bless({ raw=>'maxamentum', perl=>'&amp;max'  }, 'Verb_Resultative'), # Verba_Rezultigo
            bless({ raw=>'da',         perl=>'='     }, 'Verb_Imperative  ), # Verba_Imperativo
        )

Tiuj objektoj tiam formas fluon de termoj, kiu estas pasita al la sintaksanalizilo.

Sintaksanalizado edit

La pozicia-sendependeco de plejparta el Perligata gramatiko faras ke la tasko de sintaksanalizi ĝin estas malfacilega kiam uzi normajn ilojn, kiuj estas tipe supozas ke leksikaj komponojn aperas laŭ rigide difinita sinsekvo.

Ekzemple, por skribi rulon, kiu respondas al Perligataj proceduraj vokoj, la sekvanta estas necesa:

        Action: Dative AccusativeList Verb
              | AccusativeList Dative Verb
              | AccusativeList Verb Dative
              | Dative Verb AccusativeList
              | Verb Dative AccusativeList
              | Verb AccusativeList Dative
              | Accusative Verb Accusative
              | Dative Verb
              | AccusativeList Verb
              | Verb Dative
              | Verb AccusativeList
              | Verb

La malfacilaĵoj estas plie ampliksita per la fakto ke celoj kaj datenoj povas egale esti (la rezulto de) aliaj pozicia-sendependecaj proceduraj vokoj.

Tio produktas ekrekursivan gramatikon kun malkutima ampleksa nombro da ŝovado/redukto kaj redukto/redukto de dubasenco (pli ol 100 por ĉiu dubasenco), kio faras la gramatiko tre influeblema al subregula antaŭeco kaj al la ordado de produktadoj ene de ĉiu regulo. Aldonaĵo B montras la plena gramatiko.

Por elteni kompetente kun tiuj limigoj, Lima Anticipa Laŭflua Retroderiva (LALR) sintaksanalizilo estis konstruita pere de la bonega Parse::Yapp modulo fare de François Désarménien.


Tradukado kaj rulado edit

Ĉiu regulo de Perligata gramatiko enhavas enmetitan agon. Ope tiuj agoj konstruas plenan arbon de sintaksanalizo de la fontkodo dum la gramatiko sintaksanalizas ĝin. Ĉiu nodo de la arbo estas klasigata objekto apertenanta al klaso, kiu anstataŭas la responda Perla konstruaĵo. Ekzemple, post ĝi estis sintaksanalizita la fragmento "dum maxo maxa maxamentum damentum" estos konvertota al la sekvanta arbo:

        bless( {
            condition =>
              bless( {
                 target =>
                    bless( { raw => 'maxo', perl => '$max' }, 'Var_Target'),
                 data =>
                    bless( {
                       raw  => 'maxamentum', perl => '&amp;max',
                       data => [
                          bless( { raw=>'maxa', perl=>'@max'  }, 'Var_Data'),
                       ],
                    }, 'SubCall'),
                }, 'Assignment'),
             block =>
                undef,
        }, 'WhileLoop');

Unufoje ke la arbo estas konstruita, la samtaksa Perla kodo estas akirata per vokado de la metodo codify() tra la radiknodo te la arbo. Tio rikure alvokas la codify() metodoj de ĉiuj subnodoj de la arbo, ĉiu kies liveras ĉenon, kiu enhavas fragmenton de Perlan kodon, responda al la subarbo de tiu nodo. Per kunĉenigi tiujn fragmentojn, ĉeno kiu enhavas la plena Perla programaro estas genata. Tiu ĉeno estas asignita al $_ post fino de proceduro filter(), por esti ruleblgenata kaj rulata aŭtomate per Filter::Util::Call.

Konkludo edit

Latino estas surprize taŭgega por Perl’. La riĉa kaza strukturo provizas abundeco de eblaj mapadoj por Perlaj datenaj tipoj kaj proceduraj vokoj, speciale kiam Perl’ propra eklektika sintakso kaj semantiko estas mapigitaj al la pli regula "ago/celo/dateno" modelo.

La uzo de fleksio por indiki semantikajn rolojn en programlingvo oferas interesan variadon de la ĉieesto de pozicia sintakso, anstataŭiganta la bezonon de memori sintaksajn regulojn per bezono de memori sufiksojn. Kio el tiuj du taskoj estas la plej facila verŝajne varios de programisto al programisto.

Kun la eldono de tiu modulo al CPAN, la aŭtoro atendas senpacience la alveno de vere epika epopea Perla poezio.

Dankesprimoj edit

Specialaj dankojn al John Crossley, Tom Christiansen, kaj Bennett Todd por ilaj netakseblaj rimarkoj kaj sugestoj. Kaj mia daŭra dankemo al David Secomb kaj Deane Blackman por iliaj pacienco dum helpi min lukti kun la embarasoj de lingua Romana.

Aldono A: Perligata vortaro edit

Tiu aldono listas la plena Perligata vortprovizo, escepte por Romana numeroj (I, II, III, ktp.).

En ĉiu de la sekvantaj tabeloj, la tri kolonojestas ĉiam la samaj:

  1. Perla konstruaĵo
  2. Perligata samtaksaĵo
  3. Litera signifo de la Perligata samtaksaĵo.

Generale, nur la akuzativa formo estas indikita por nomoj kaj adjektivoj, kaj nur la imperativo por verboj.

Tabelo A1: Taksigoj kaj taksujoj
0 nullum neniu
1 unum unu
2 duo du
3 tres tri
4 quattuor kvar
5 quinque kvin
6 sex ses
7 septem sep
8 octo ok
9 novem naŭ
10 decem dek
1/2 secundum due
1/3 tertium trie
1/4 quartum kvare
1/5 quintum kvine
1/6 sextum sese
1/7 septimum sepe
1/8 octavum oke
1/9 nonum naŭe
1/10 decimum deke
$1 parprimum egala al la unua
$2 parsecundum egala al la dua
$3 partertium egala al la tria
$4 parquartum egala al la kvar
$5 parquintum egala al la kvina
$6 parsextum egala al la sesa
$7 parseptimum egala al la sepa
$8 paroctavum egala al la oka
$9 parnonum egala al la naŭa
$10 pardecimum egala al la deka
$/ ianitorem pordisto
$#var admeta mezuri
$_ hoc/huic tiu aĵo
@_ his/horum tiuj aĵoj
":" biguttam du punktoj
" " lacunam breĉo
"\t" stadium "a stride"
"\n" novumversum nova linio
local loco anstataŭ de
my meo mia
our nostro nia
main princeps ĉefa
Tabelo A2: citoperaciiloj
inque diri
q// inque diri
m// compara respondi
s/// substitue anstataŭigi
tr/// converte traduki
y/// converte traduki
Tabelo A3: matematikaj operaciiloj kaj funkcioj
+ adde aldonas
- deme substraktas
- nega neas
* multiplica muliplikas
/ divide dividas
% recide falaĵigas
** eleva levas
++ preincresce pliigas antaŭe
++ postincresce pliigas poste
-- predecresce malpliigas antaŭe
-- postdecresce malpliigas poste
abs priva senigas el
atan2 angula kreas angulon
sin oppone kontraŭas
cos accuba kuŝi apud
int decolla demetas
log succide subfalas
sqrt fode radiki
rand conice loti
srand prosemina dissemi
Tabelo A4: logikaj kaj komparaj operaciiloj
! non ĝenerala neeco
&& atque emfaza kaj
|| vel emfaza aŭ
and -que kaj
or -ve
< praestantiam antaŭeco de
lt praestantias antaŭecoj de
<=> comparitiam komparaĵo de
cmp comparitias komparaĵoj de
== aequalitam egaleco de
eq aequalitas egalecoj de
Tabelo A5: Ĉenoj
chomp morde mordas
chop praecide antaŭfalas
chr inde nomdonu al
hex senidemi po dek ses
oct octoni po ok
ord numera nombras
lc deminue malkreskas
lcfirst minue malkreskas
uc amplifica kreskas
ucfirst amplia kreskas
quotemeta excipe esceptigas
crypt huma entombigas
length meta mezuras
pos reperi lokdonas
pack convasa enpakas bagaĝon
unpack deconvasa elpakas bagaĝon
split scinde disiĝas
study stude studas
index scruta serĉas
join coniunge kuniĝas
substr excerpe eltiras
Tabelo A6: Skalaraj, vicoj kaj haktabeloj
defined confirma kontrolas
undef iani vakua, vakuigas
scalar secerna distingas, izolas
reset lusta purigi
pop decumula malakumulas, konsumas, elstakigas
push cumula akumulas, elstakigas
shift decapita senkapigi
unshift capita kronas, enkapigi
splice iunge splisas
grep vanne ventumas
map applica aplikas , mapigas
sort digere ordigas
reverse retexe inversigas
delete dele forviŝas
each quisque ĉiu
exists adfirma konfirmas
keys nomina nomoj
values argue malkaŝi enhavon
Tabelo A7: enigoj/eligoj relatitaj
open evolute malfermu libron
close claude fermu libron
eof extremus fino de, ekstremaĵo
read lege legu
getc sublege prenu ion, sublegu
readline perlege tralegu
print scribe skribu
printf describe priskribu
sprintf rescribe reskribu
write subscribe subskribu
format pinge farbu, pentru, peniku
formline distingue intermeti, interplekti
pipe inriga irigacii, dreni
tell enunta diru
seek conquire serĉi
STDIN vestibulo enirejo
STDOUT egresso elirejo
STDERR oraculo pereo-deklarejo
DATA fonti fonto


Tabelo A8: Kontroloj
{...} sic...cis jene… cise (ĝis tie)
do fac faru
sub {...} factorem sic...cis iu faranta jene… cise
eval aestima taksi
exit exi eliri
for per por
foreach per quisque por ĉiu
goto adi iru al
if si se
return redde redonu
unless nisi se ne
until donec ĝis
while dum dum
wantarray deside volu
last ultimus lasta
next posterus sekvanta
redo reconatus provi denove
continue confectus kompletigu
die mori mortu
warn mone avertu
Tabelo A9: Pakaĵoj, kaloj kaj moduloj
-> apud el la domo de
:: intra ene
bless benedice benu
caller memora rakontu historion
package domus domo de
ref agnosce identigi
tie liga ligi
tied exhibe montri ion
untie solve malligi
require require bezoni
use ute uzi
Tabelo A10: Sistemo kaj dosiersistema interago
chdir demigrare migri
chmod permitte permesu, allasu, ebligu
chown vende vendu
fcntl modera funkciigu
flock confluee kungregiĝu
glob inveni serĉi
ioctl impera komandu
link copula ligu
unlink decopula malligu
mkdir aedifica konstruu
rename renomina renomu
rmdir excide eldetruu
stat exprime priskribu
truncate trunca mallongigu
alarm terre teruru
dump mitte forlasi
exec commuta transformu
fork furca forko
kill interfice mortigu
sleep dormi dormu
system obsecra petegu al plialta potenco
umask dissimula masku
wait manta atendu


Table A11: Miscellaneous operators


Tabelo A11: Diveraj operaciiloj
, tum tiame
. sere komponi, kunligi
.. conscribe varbiĝi
\ ad al
= da donas

Aldone B: Perligata gramatiko edit

Script:         Statement(s)                                     # Skripto: ordono(j)

Statement       ( Conditional | Imperative | Data | Target ) '.' # Ordono, Kondicionalo, Imperativo, Dateno, Celo 

Conditional:      Control Block                                  # Kondicionalo, Ŝaltpelilo, Ingo
                | Imperative Control

Control:          'dum'   Data  'fac'                      # dum, faru
                | 'donec' Data  'fac'                      # ĝis
                | 'si'    Data  'fac'                      # se
                | 'nisi'  Data  'fac'                      # krom-se
                | /per (quisque)?/ NOUN_ACCUSATIVE(?)      # por (ĉiu), akuzativa nomo
                                   'in' Target 'fac'       # en

Block:            'sic'  Script  'cis'      # jene, cise

Imperative:       Data Verb Data
                | Target Datalist Verb      # celo, datenlisto, verbo
                | Datalist Target Verb
                | Datalist Verb Target(?)
                | Target Verb Datalist(?)
                | Verb Target Datalist(?)
                | Verb Datalist Target(?)
                | Verb

Target:           NOUN_DATIVE                             # dativa nomo
                | POSSESSIVE  NOUN_DATIVE                 # posesivo (tio estas) my $A, local @B, ktp.
                | Block
                | Data  Resultative_dative  Data          # dativa rezultanto
                | Target  Datalist  Resultative_dative 
                | Datalist  Target  Resultative_dative
                | Datalist  Resultative_dative  Target(?)
                | Target  Resultative_dative  Datalist(?)
                | Resultative_dative  Target  Datalist(?)
                | Resultative_dative  Datalist(?)  Target(?)
                | Target  'intra'  Accusative           # B::A
                | Target  'apud'  Dative                # B->A
                | Target NOUN_GENITIVE                  # B[A]
                | 'factori' Block                       # sub {...}

Accusative:       NOUN_ACCUSATIVE
                | 'ad'  Accusative                      # \A
                | Accusative  'intra'  Accusative       # B::A
                | Accusative  'apud'  Accusative        # B->A
                | Accusative  NOUN_GENITIVE             # B[A]
                | 'factorem' Block                      # sub {...}

Data:             Accusative
                | 'nega'  Data                          # -A
                | 'non'  Data                           # !A
                | Data  Resultative_accusative  Data
                | Target  Datalist  Resultative_accusative
                | Datalist  Target  Resultative_accusative
                | Datalist  Resultative_accusative  Target(?)
                | Target  Resultative_accusative  Datalist(?)
                | Resultative_accusative  Target  Datalist(?)
                | Resultative_accusative  Datalist(?)  Target(?)

Verb:             VERB
                | Verb  'intra'  Accusative             # B::A()
                | Verb  'apud'  Dative                  # B->A()

Resultative_dative:              
                  RESULTATIVE_DATIVE
                | Resultative_dative  'intra'  Accusative       
                | Resultative_dative  'apud'  Dative

Resultative_accusative:          
                  RESULTATIVE_DATIVE
                | Resultative_accusative  'intra'  Accusative   
                | Resultative_accusative  'apud'  Dative        

Datalist:         Datalist  'tum'  Data
                | Data

Notoj edit

  1. Esperanto ne havas dativon, kvankam ekzistas fantaziaj proponoj, kiel Arcaicam Esperantom kie -d markas dativon kiel -n por la akuzativo en Esperanto. Sed en Esperanto, oni kutime uzas la propozicio "al" antaŭ la nerekta objekto.
  2. Esperanto uzas aŭ pluron aŭ la -ar- afikson por tio.
  3. La vorto ŝlosilo estas klasika sed analogia termo, anstataŭebla per indico, indikilo, montrilo. La Angla termo havas avantaĝo de mallongeco. En esperanto, la termo "nadlo" estas ankaŭ uzebla per analogio, kun malpli longa vorto.
  4. Aŭ vicero
  5. Lingvistike ili nomiĝas deiktoj.

Referencoj edit

  1. Vidu biguttatus