Paslėptos Perlo funkcijos?

Kokios yra tikrai naudingos, bet esoterinės kalbos funkcijos, kurias jūs galite naudoti naudingam darbui?

Vadovas:

  • Pabandykite apriboti atsakymus į „Perl“ branduolį, o ne į „CPAN“.
  • Pateikite pavyzdį ir trumpą aprašymą.

Paslėptos funkcijos taip pat randamos kitomis kalbomis. Paslėptos funkcijos:

(Visi iš Corion atsakymo )

  • C
    • „Duff“ įrenginys
    • Nešiojami ir standartiniai
  • Su #
    • Kotiruotės sąrašams ir eilutėms su erdvės ribotuvais
    • Paprasta vardų erdvė
  • „Java“
    • Statiniai iniciatoriai
  • „Javascript“
    • Funkcijos yra pirmos klasės piliečiai.
    • Plotas ir blokavimas
    • Metodai ir priedai netiesiogiai skambinami per kintamąjį
  • Ruby
    • Metodų nustatymas su kodu
  • Php
    • Proveržio internetinė dokumentacija
    • Magiški metodai
    • Simbolinės nuorodos
  • Python
    • Vienos linijos mainai
    • Galimybė pakeisti net pagrindines funkcijas savo funkcijomis.

Kitos paslėptos funkcijos:

Operatoriai:

Dizaino kainos:

Sintaksė ir vardai:

Moduliai, „Pragmas“ ir komandinės eilutės parametrai:

Kintamieji

Ciklai ir srauto valdymas:

Reguliarios išraiškos:

Kitos funkcijos:

Kiti gudrybės ir meta-atsakymai:


Taip pat žiūrėkite:

143
02 окт. Adam Bellaire rinkinys 02 okt. 2008-10-02 14:49 '08 at 14:49 PM 2008-10-02 14:49
@ 78 atsakymai
  • 1
  • 2
  • 3

Įsijungimo operatorius yra naudingas praleidžiant pirmąjį iteraciją, kai slenkama per failų deskriptoriaus grąžinamus įrašus (paprastai eilutes), nenaudojant vėliavos kintamojo:

 while(<$fh>) { next if 1..1; # skip first record ... } 

Paleiskite perldoc perlop ir ieškokite „flip-flop“ daugiau informacijos ir pavyzdžių.

54
02 окт. John Siracusa atsakymas 02 okt. 2008-10-02 15:41 '08 at 3:41 pm 2008-10-02 15:41

Perl'e yra daug neaiškių funkcijų.

Pavyzdžiui, ar žinojote, kad po sigilo gali būti erdvė?

  $ perl -wle 'my $x = 3; print $ x' 3 

Arba galite nurodyti skaitmeninius subtitrų pavadinimus, jei naudojate simbolines nuorodas?

 $ perl -lwe '*4 = sub { print "yes" }; 4->()' yes 

Taip pat yra kvazio operatoriaus „bool“, kuris grąžina 1 tikroms išraiškoms ir tuščią eilutę:

 $ perl -wle 'print !!4' 1 $ perl -wle 'print !!"0 but true"' 1 $ perl -wle 'print !!0' (empty line) 

Kiti įdomūs dalykai: use overload galite perkrauti styginių literatūrą ir numerius (ir, pvz., Padaryti juos BigInts ar kitu).

Daugelis šių dalykų yra iš tikrųjų dokumentuojami kažkur arba logiškai išplaukia iš dokumentuotų funkcijų, tačiau kai kurie iš jų nėra labai gerai žinomi.

Atnaujinimas: dar vienas gražus. Žemiau buvo pateiktos citatos q{...} , bet ar žinojote, kad galite naudoti raides kaip ribotuvus?

 $ perl -Mstrict -wle 'print q bJet another perl hacker.b' Jet another perl hacker. 

Taip pat galite rašyti reguliarias išraiškas:

 m xabcx # same as m/abc/ 
47
02 окт. atsakymą pateikė moritz 02 oct. 2008-10-02 15:50 '08 at 15:50 2008-10-02 15:50

Pridėkite suspausto failo palaikymą naudojant magiją ARGV:

 s{ ^ # make sure to get whole filename ( [^'] + # at least one non-quote \. # extension dot (?: # now either suffix gz | Z ) ) \z # through the end }{gzcat '$1' |}xs for @ARGV; 

(citatos apie $ _ reikalingos failų pavadinimams su apvalkalo metacharakstais tvarkyti)

Dabar funkcija <> bus ištrinti bet kokius @ARGV failus, kurie baigiasi „.gz“ arba „.Z“:

 while (<>) { print; } 
46
02 окт. atsakymas yra duotas 02kt . 2008-10-02 20:23 '08 at 8:23 pm 2008-10-02 20:23

Viena iš mano mėgstamiausių funkcijų Perl yra loginis operatorius || pasirinkti tarp pasirinkimų.

  $x = $a || $b; # $x = $a, if $a is true. # $x = $b, otherwise 

Tai reiškia, kad galite rašyti:

  $x = $a || $b || $c || 0; 

priimti pirmąją tikrąją vertę $a , $b ir $c arba numatytąjį 0 kitaip.

Perl 5.10, taip pat yra // operatorius, kuris grąžina kairę pusę, jei ji yra apibrėžta, o dešinė pusė sugrįžta kitaip. Toliau pasirinkta pirmoji apibrėžta reikšmė nuo $a , $b , $c arba 0 kitaip:

 $ x = $ a // $ b // $ c // 0;

Jie taip pat gali būti naudojami su jų trumpomis formomis, kurios yra labai naudingos numatytoms reikšmėms pateikti:

 $ x || = 0;  # Jei $ x buvo neteisingas, jis dabar yra 0. $ x // = 0;  # Jei $ x buvo neapibrėžta, jo vertė yra nulis.

Cheerio

Paulius

40
02 окт. atsakymas pateikiamas pjf 02 okt. 2008-10-02 16:23 '08 at 4:23 pm 2008-10-02 16:23

Operatoriai ++ ir unary - dirba ne tik numeriais, bet ir eilutėmis.

 my $_ = "a" print -$_ 

spausdina -a

 print ++$_ 

spaudiniai b

 $_ = 'z' print ++$_ 

spausdina aa

39
02 окт. atsakymą pateikė Leon Timmermans 02 okt. 2008-10-02 15:26 '08 at 15:26 2008-10-02 15:26

Kadangi Perl turi beveik visas „ezoterines“ dalis iš kitų sąrašų, pasakysiu jums vieną dalyką, kurį Perl negali:

Vienintelis dalykas, kurį Perl negali padaryti, yra savavališki URL kode, nes // operatorius naudojamas reguliarioms išraiškoms.

Bet kuriuo atveju jums nebuvo aišku, kokias funkcijas siūlo „Perl“, yra pavyzdžių sąrašas, galbūt ne visiškai akivaizdūs įrašai:

„Duff Device“ - „Perl“

Perkeliamumas ir standartizavimas - tikriausiai daugiau kompiuterių su Perl nei su C kompilatoriumi

Failo / kelio manipuliavimo klasė - failas :: Raskite darbą dar daugiau operacinių sistemų, nei .NET

Cituojamos erdvės ribų ir styginių citatos - „ Perl“ leidžia pasirinkti beveik savavališkus savo sąrašo ir eilutės ribų kabutes

Maistiniai vardų plotai - „Perl“ atlieka šiuos uždavinius:

 *My::Namespace:: = \%Your::Namespace 

Statiniai iniciatoriai - „Perl“ gali paleisti kodą beveik visuose objekto sudarymo ir kūrimo etapuose, nuo BEGIN (analizuojantis kodas) iki CHECK (po analizės kodo), kad import (importuojant modulį) į new (kuriant objektą) į DESTROY (objekto DESTROY ) į END (programos išėjimas)

Funkcijos yra pirmos klasės piliečiai - kaip ir Perl

Blokuoti plotą ir uždarymą - Perl turi abu

Skambinant metodais ir priedais netiesiogiai per kintamąjį - Perl taip pat tai daro:

 my $method = 'foo'; my $obj = My::Class->new(); $obj->$method( 'baz' ); # calls $obj->foo( 'baz' ) 

Metodų apibrėžimas naudojant kodą - „ Perl“ taip pat leidžia :

 *foo = sub { print "Hello world" }; 

Proveržio internete dokumentacija - „ Perl“ dokumentacija yra internete ir tikriausiai jūsų sistemoje

Magiški metodai , kurie vadinami skambinant „neegzistuojančiai“ funkcijai - „Perl“ tai įgyvendina „AUTOLOAD“ funkcijoje

Simboliškos nuorodos - jums geriau patartina likti nuošalyje nuo jų. Jie valgys tavo vaikus. Bet, žinoma, Perl leidžia jums pasiūlyti savo vaikams kraujo pykčio demonus.

„Single String Exchange“ - „Perl“ leidžia priskirti sąrašą

Galimybė pakeisti net pagrindines funkcijas savo funkcijomis.

 use subs 'unlink'; sub unlink { print 'No.' } 

arba

 BEGIN{ *CORE::GLOBAL::unlink = sub {print 'no'} }; unlink($_) for @ARGV 
36
02 окт. atsakymas pateikiamas Corion 02 okt. 2008-10-02 16:27 '08 at 4:27 pm 2008-10-02 16:27

Autovivification . AFAIK nėra kita kalba .

35
02 окт. atsakymas pateikiamas JJ 02 okt. 2008-10-02 16:48 '08 at 4:48 pm 2008-10-02 16:48

Tiesiog cituokite beveik bet kokį keistą eilutę Perl.

 my $url = q{http://my.url.com/any/arbitrary/path/in/the/url.html}; 

Iš tiesų, įvairūs Perl citavimo mechanizmai yra gana įdomūs. Citavimo mechanizmai, tokie kaip Perlo išraiškos, leidžia jums paminėti beveik viską, nurodydami ribotuvus. Galite naudoti beveik bet kokį ypatingą simbolį, pavyzdžiui, #, / arba atidaryti / uždaryti simbolius, tokius kaip (), [] arba {}. Pavyzdžiai:

 my $var = q#some string where the pound is the final escape.#; my $var2 = q{A more pleasant way of escaping.}; my $var3 = q(Others prefer parens as the quote mechanism.); 

Citavimo mechanizmai:

q: tiesioginė citata; vienintelis išeinantis simbolis yra galutinis simbolis. qq: aiškinama citata; tvarko kintamuosius ir pabėgimo simbolius. Puikiai tinka linijoms, kurias reikia cituoti:

 my $var4 = qq{This "$mechanism" is broken. Please inform "$user" at "$email" about it.}; 

qx: veikia kaip qq, bet tada jį atlieka kaip sistemos komandą, o ne interaktyvią. Grąžina visą tekstą, gautą iš standarto. (Peradresavimas, jei palaiko OS, taip pat palieka) Taip pat vykdomas su atgaline citata (simboliu).

 my $output = qx{type "$path"}; # get just the output my $moreout = qx{type "$path" 2> # get stuff on stderr too 

qr: interpretuoja kaip qq, bet tada ją sudaro kaip įprastą išraišką. Veikia su įvairiomis reguliariomis išraiškomis. Dabar galite reguliariai išreikšti kintamąjį:

 sub MyRegexCheck { my ($string, $regex) = @_; if ($string) { return ($string =~ $regex); } return; # returns 'null' or 'empty' in every context } my $regex = qr{http://[\w]\.com/([\w]+/)+}; @results = MyRegexCheck(q{http://myurl.com/subpath1/subpath2/}, $regex); 

qw: labai naudingas citatos operatorius. Įtrauktas cituojamas atskirų žodžių sąrašas. Puikiai tinka pildyti duomenis į vieneto testą.

 my @allowed = qw(ABCDEFGHIJKLMNOPQRSTU VWXYZ { }); my @badwords = qw(WORD1 word2 word3 word4); my @numbers = qw(one two three four 5 six seven); # works with numbers too my @list = ('string with space', qw(eight nine), "a $var"); # works in other lists my $arrayref = [ qw(and it works in arrays too) ]; 

Jie žino, kaip juos naudoti, kai jis tampa aiškesnis. Qx, qq ir q atveju, greičiausiai naudoju operatorius {}. Dažniausiai paplitę žmonės, naudojantys qw, paprastai yra () operatorius, tačiau kartais taip pat matote qw //.

31
02 окт. atsakymas pateikiamas Robert P 02 okt. 2008-10-02 19:43 '08, 19:43, 2008-10-02 19:43

Ne labai paslėpta, bet daug kartų per dieną Perl programuotojai nežino apie CPAN . Tai ypač pasakytina apie žmones, kurie nėra visą darbo dieną dirbantys programuotojai arba neveikia Perl.

27
02 окт. atsakymą pateikė mpeters 02 oct. 2008-10-02 20:25 '08 at 8:25 pm 2008-10-02 20:25

Operatorius „už“ gali būti naudojamas taip pat, kaip „c“ naudojamas „Pascal“:

 for ($item) { s/ /g; s/<.*?>/ /g; $_ = join(" ", split(" ", $_)); } 

Galite taikyti operacijų seką s /// ir tt į tą patį kintamąjį, nereikia kartoti kintamojo pavadinimo.

PASTABA. Nuolatinė erdvė aukščiau ( nbsp;) paslėpė Unicode, kad apeitų Markdown. Negalima nukopijuoti :)

27
02 окт. atsakymas yra duotas 02kt . 2008-10-02 20:11 '08 at 8:11 pm 2008-10-02 20:11

Citatos žodyno operatorius yra vienas iš mano mėgstamiausių dalykų. Palyginimui:

 my @list = ('abc', 'def', 'ghi', 'jkl'); 

ir

 my @list = qw(abc def ghi jkl); 

Labai mažiau triukšmo, lengviau ant akies. Kitas tikrai gražus dalykas apie Perl, kuris tikrai trūksta, kai rašote SQL yra tai, kad galutinis kablelis yra teisėtas:

 print 1, 2, 3, ; 

Atrodo keista, bet ne tuo atveju, jei kodą atskiriate kitaip:

 print results_of_foo(), results_of_xyzzy(), results_of_quux(), ; 

Papildomo argumento įtraukimas į funkcijų skambutį nereikalauja, kad pirmesnėse ar užpakalinėse linijose žaisite kablelį. Vienos linijos pakeitimas neturi įtakos jo aplinkinėms linijoms.

Labai malonu dirbti su variacijos funkcijomis. Tai tikriausiai yra viena iš nepakankamai vertinamų Perl savybių.

26
02 окт. atsakymas yra dland 02 02. 2008-10-02 19:54 '08, 19:54, 2008-10-02 19:54

Gebėjimas analizuoti duomenis, tiesiogiai įterptus į DATA bloką. Jums nereikia įrašyti į bandomąjį failą, kurį norite atidaryti programoje ar panašiai. Pavyzdžiui:

 my @lines = <DATA>; for (@lines) { print if /bad/; } __DATA__ some good data some bad data more good data more good data 
26
02 окт. atsakymas duotas allan 02 okt. 2008-10-02 20:57 '08 at 8:57 pm 2008-10-02 20:57

Dvejetainis „x“ yra pakartotinis pareiškimas:

 print '-' x 80; # print row of dashes 

Jis taip pat veikia su sąrašais:

 print for (1, 4, 9) x 3; # print 149149149 
24
02 окт. Bruno De Fraine atsakymas 02 spalis 2008-10-02 15:45 '08, 15:45, 2008-10-02 15:45

Patikrinkite subtilumą. Jei įjungtas pernelyg didelis perl, jis mirs (arba įspės, -t ), jei bandysite perduoti sugadintus duomenis (apytiksliai, duomenis iš programos ribų) į nesaugią funkciją (atidarant failą, paleisdami išorinę komandą ir pan.).). Tai labai naudinga rašant „setuid“ arba „CGI“ scenarijus arba kažką, kur scenarijus turi daugiau privilegijų nei asmuo, kuris jį pateikia.

Magiškas perėjimas. goto > atlieka optimizuotą uodegos skambutį.

Debugger

use strict ir use warnings . Tai gali jums sutaupyti daug klaidų.

24
02 окт. atsakymą pateikė Glomek 02 okt. 2008-10-02 20:00 '08 8:00 val. 2008-10-02 20:00

Naujos operacijos su įrenginiu

Sakyčiau, kad gebėjimas išplėsti kalbą sukuriant pseudoblock operacijas yra vienas.

  • Jūs deklaruojate prototipo potipį, nurodantį, kad jis pirmą kartą užima nuorodą į kodą:

     sub do_stuff_with_a_hash ( { my ( $block_of_code, $hash_ref ) = @_; while ( my ( $k, $v ) = each %$hash_ref ) { $block_of_code->( $k, $v ); } } 
  • Tada jūs galite jį paleisti į kūną

     use Data::Dumper; do_stuff_with_a_hash { local $Data::Dumper::Terse = 1; my ( $k, $v ) = @_; say qq(Hey, the key is "$k"!); say sprintf qq(Hey, the value is "%v"!), Dumper( $v ); } %stuff_for ; 

( Data::Dumper::Dumper yra dar vienas paslėptas paslėptas akmuo). Atkreipkite dėmesį, kad prieš bloką prieš maišą nereikia raktinio žodžio sub arba kablelio. Tai galiausiai atrodo taip: map { } @list

Šaltinio filtrai

Be to, yra šaltinių filtrai. Jei Perl suteiks jums kodą, kad galėtumėte jį manipuliuoti. Šios ir bloko operacijos dažniausiai netinka šiam dalykui.

Kai kuriuos tvarkingus dalykus naudoju su šaltinių filtrais, pvz., Sukuriant labai paprastą kalbą, kad galėtumėte patikrinti laiką, leidžiant jums naudoti trumpus vienos eilutės Perl sprendimus tam tikriems sprendimams priimti:

 perl -MLib::DB -MLib::TL -e 'run_expensive_database_delete() if $hour_of_day < AM_7'; 

Lib::TL tiesiog nuskaito abu „kintamuosius“ ir konstantus, juos sukuria ir prireikus pakeičia juos.

Vėlgi, originalūs filtrai gali būti netikslūs, bet galingi. Bet jie gali sugadinti debugger su kažkuo baisu - ir net įspėjimai gali būti atspausdinti netinkamais eilutės numeriais. Aš nustojau naudoti „Damian Switch“, nes derintojas būtų praradęs visas galimybes pasakyti, kur aš tikrai buvau. Tačiau pastebėjau, kad galite sumažinti žalą, keisdami nedideles kodo dalis, laikydami jas vienoje eilutėje.

Signaliniai kabliai

Tai dažnai daroma, bet tai nėra taip akivaizdu. Čia plėšikas, kuris yra kiaulė, sulaikanti seną.

 my $old_die_handler = $SIG{__DIE__}; $SIG{__DIE__} = sub { say q(Hey! I'm DYIN' over here!); goto  } ; 

Tai reiškia, kad kai bet kuris kitas modulio modulis nori mirti, jis turi ateiti pas jus (nebent kas nors kitaip pertrauka įrašą su $SIG{__DIE__} ). Ir jums gali būti pranešta, kad kažkas yra klaida.

Žinoma, už tai, kad pakankamai dalykų, galite tiesiog naudoti bloką END { } , jei viskas, ką norite padaryti, yra aiški.

overload::constant

Galite patikrinti tam tikras literatūros rūšis paketuose, kuriuose yra jūsų modulis. Pvz., Jei naudojate tai savo import dalyse:

 overload::constant integer => sub { my $lit = shift; return $lit > 2_000_000_000 ? Math::BigInt->new( $lit ) : $lit }; 

tai reiškia, kad kiekvienas skambinančiojo paketo sveikasis skaičius virš 2 mlrd. bus pakeistas į Math::BigInt . (Žr. Perkrovą :: pastovus ).

Grupuotos visos raidės

Kol mes esame. Perl leidžia pertraukti didelius skaičius į trijų skaitmenų grupes ir gauti tik sintaksinį sveikąjį skaičių. Pastaba 2_000_000_000 didesnis už 2 mlrd.

24
02 окт. Atsakyti Axeman 02 oct. 2008-10-02 17:31 '08 at 17:31 pm 2008-10-02 17:31

Remiantis tuo, kaip „Per "-n" ir "-p" jungikliai yra įdiegti, galite parašyti klaidingą programą, įskaitant }{ :

 ls |perl -lne 'print $_; }{ print "$. Files"' 

kuris yra konvertuojamas į šį kodą:

 LINE: while (defined($_ = <ARGV>)) { print $_; }{ print "$. Files"; } 
22
02 окт. atsakymas pateiktas 02 sp 2008-10-02 15:48 '08 ne 15:48 2008-10-02 15:48

žemėlapis yra ne tik dėl to, kad jis daro vieną kodą išraiškingesnį, bet todėl, kad jis davė man impulsą skaityti šiek tiek daugiau apie šį „funkcinį programavimą“.

18
03 окт. atsakymas suteiktas brunorc 03 okt. 2008-10-03 18:04 '08, 18:04 2008-10-03 18:04

Lengva pradėti nuo kosminio laivo operatoriaus .

 $a = 5 <=> 7; # $a is set to -1 $a = 7 <=> 5; # $a is set to 1 $a = 6 <=> 6; # $a is set to 0 
18
02 окт. atsakymas pateiktas 02 sp 2008-10-02 15:09 '08 at 3:09 pm 2008-10-02 15:09

Tai yra meta-atsakymas, tačiau „ Perl Tips“ archyvuose yra įvairių įdomių gudrybių, kuriuos galima atlikti su „Perl“. Ankstesnių patarimų archyvas yra prieinamas internete ir gali būti prenumeruojamas per adresatų sąrašą arba atomo šaltinį.

Kai kurie iš mano mėgstamiausių patarimų apima vykdomųjų failų kūrimą su PAR , naudojant autodie automatiškai išskirti išimtis ir naudoti Perl 5.10.

Informacijos atskleidimas: aš esu vienas iš „Perl“ patarėjų autorių ir rėmėjų, todėl akivaizdžiai juos vertinu.)

18
02 окт. atsakymas pateikiamas pjf 02 okt. 2008-10-02 16:30 '08 4:30 val. 2008-10-02 16:30

Tęstinė sąlyga kilpose. Jis bus vykdomas kiekvieno ciklo apačioje, net ir tose, kurios yra toliau.

 while( <> ){ print "top of loop\n"; chomp; next if /next/i; last if /last/i; print "bottom of loop\n"; }continue{ print "continue\n"; } 
15
04 окт. atsakymas, kurį pateikė Shawn H Corey 04 Oct 2008-10-04 05:29 '08 at 5:29 am 2008-10-04 05:29

Mano balsavimas bus skirtas grupėms (? {)) Ir (?? {}) Perl reguliarioms išraiškoms. Pirmasis atlieka Perl kodą, ignoruodamas grąžinimo vertę, antrasis atlieka kodą naudodamas grąžinimo reikšmę kaip įprastą išraišką.

15
02 окт. atsakymą pateikė Leon Timmermans 02 okt. 2008-10-02 15:19 '08 at 15:19 2008-10-02 15:19
 while(/\G(\b\w*\b)/g) { print "$1\n"; } 

G inkaro. Jis yra karštas .

13
02 окт. atsakymas pateikiamas JJ 02 okt. 2008-10-02 17:25 '08 at 17:25 pm 2008-10-02 17:25

Operatorius m// turi tam tikrų neaiškių specialių atvejų:

  • Jei naudojate ? kaip ribotuvas, jis atitinka tik vieną, nebent skambinate reset .
  • Jei naudojate kaip separatorių, modelis nėra interpoliuojamas.
  • Jei modelis yra tuščias, jis naudoja paskutinio sėkmingo atitikimo modelį.
13
02 окт. Michael Carman atsakymas, pateiktas spalio 02 d 2008-10-02 16:25 '08 at 4:25 pm 2008-10-02 16:25

Deimanto <> operatoriaus nulinės rinkmenos rankena turi vietą komandų eilutės įrankių kūrime. Jis veikia kaip <FH> skaitymui iš deskriptoriaus, išskyrus tai, kad jis stebuklingai pasirenka tai, kas buvo nustatyta pirma: komandų eilutės failų arba STDIN pavadinimai. Paimta iš perlop:

 while (<>) { ... # code for each line } 
12
02 окт. atsakymas duotas spoulson 02 okt. 2008-10-02 16:06 '08 at 4:06 pm 2008-10-02 16:06
 rename("$_.part", $_) for "data.txt"; 

renames data.txt.part į data.txt be pakartojimo.

11
02 окт. atsakymas yra duotas 02kt . 2008-10-02 20:12 '08 at 8:12 pm 2008-10-02 20:12

Specialūs kodo blokai, pvz., BEGIN , CHECK ir END . Jie ateina iš Awk, tačiau jie dirba skirtingai Perl, nes jie nėra pagrįsti įrašu.

BEGIN gali būti naudojamas tam tikram kodavimo fazei nustatyti; jis taip pat veikia, kai atliekate sintaksės patikrinimą ir perl -c kintamąjį. Pavyzdžiui, norint įkelti konfigūracijos kintamuosius:

 BEGIN { eval { require 'config.local.pl'; }; if ($@) { require 'config.default.pl'; } } 
11
02 окт. Bruno De Fraine atsakymas 02 spalis 2008-10-02 16:16 '08, 16:16 pm 2008-10-02 16:16

Šiek tiek neaiškus yra tilde-tilde „operatorius“, kuris verčia skalinį kontekstą.

 print ~~ localtime; 

atitinka

 print scalar localtime; 

ir skiriasi nuo

 print localtime; 
10
02 окт. atsakymas pateiktas 02 sp 2008-10-02 15:42 '08 at 15:42 2008-10-02 15:42

Įvesties įrašo separatoriuje galite nurodyti numerį, kad galėtumėte skaityti fiksuoto ilgio įrašus:

 $/ = \3; print $_,"\n" while <>; # output three chars on each line 
9
22 июня '09 в 15:39 2009-06-22 15:39 atsakymas duotas birželio 22 d., 09:15, 2009-06-22 15:39

Оператор goatse * :

 $_ = "foo bar"; my $count =()= /[aeiou]/g; #3 

arba

 sub foo { return @_; } $count =()= foo(qw/abcd/); #4