Perl

Perl
Perl
Extensii fișiere.pl .pm .t .pod
Paradigmămulti-paradigmă: funcțional, imperativ, obiect-orientat, reflectiv, procedural, event-driven, generic
Apărut în1987; acum 37 ani (1987)
Proiectat deLarry Wall
DezvoltatorLarry Wall
Ultima versiune5.24.0[1]/ 9 mai 2016; acum 8 ani și 15 zile (2016-05-09)
TipareDinamic
Influențat deAWK, Smalltalk 80, Lisp, C, C++, sed, Unix shell, Pascal
InfluențePython, PHP, Ruby, ECMAScript/Javascript, LPC, Windows PowerShell, Falcon, Perl 6, Qore, Julia
Sistem de operareMultiplatformă
LicențăGNU General Public License sau Artistic License[2]
Prezență onlinewww.perl.org
Wikibooks logo Perl Programming la Wikibooks
Modifică date / text Consultați documentația formatului

Perl este un limbaj de programare dinamic, procedural, creat de Lary Wall în 1987. Perl împrumută caracteristicile limbajelor C, shell, AWK, sed, Lisp și ale multor alte limbaje într-o măsură mai mică.

O caracteristică importantă care deosebește Perl de alte limbaje este faptul că beneficiază de un repository numit CPAN ce conține module open-source bine documentate. Utilizarea CPAN pentru re-folosirea codului deja scris este încurajată.

Prezentare generală

Conform paginii de manual perlintro(1)

Perl este un limbaj de programare generic inițial dezvoltat pentru manipularea de text și în prezent folosit pentru o gamă largă de aplicații inclusiv administrarea de sisteme, dezvoltare web, aplicații de rețea, interfețe grafice și altele.
Limbajul intenționează să fie practic, ușor de folosit, eficient, complet. Caracteristicile principale sunt ușurința de utilizare, suport pentru programare procedurală și obiectuală, are integrat un suport puternic pentru procesarea de text și o colecție mare de module provenite de la terți.[3]

Design

Designul Perl poate fi înțeles ca un răspuns la trei mari tendințe în industria calculatoarelor: scăderea prețurilor la hardware, creșterea costurilor de dezvoltare, îmbunătățiri în tehnologia compilatoarelor. Multe limbaje apărute înainte, cum ar fi Fortran sau C au fost concepute pentru a utiliza eficient resursele hardware scumpe la momentul respectiv.

Perl are multe caracteristici care ușurează sarcina programatorului cu prețul unei mai mari utilizări a procesorului și a memoriei. Acestea includ un garbage collector , tipuri dinamice, string-uri, liste, expresii regulate și o funcție eval().

În Perl se pot implementa elemente de programare functională(Higher Order Perl) și programare orientata pe obiect(Object oriented Perl).

Comunitate

Limbajul Perl și-a format o comunitate relativ mare. Site-ul Perlmonks.org e un forum dar și o sursa de informații referitoare la Perl, conține o serie de tutoriale foarte detaliate. De asemenea, pe IRC există câteva canale care au ca subiect limbajul Perl. Aceste canale oferă suport pentru limbajul Perl sau pentru anumite module.

Retea IRC Canale
FreeNode ( irc.freenode.net ) #poe , #perl , #cbstream , #perlcafe
irc.perl.org #moose , #poe , #catalyst , #dbix-class , #perl-help
irc.oftc.net #perl
irc.efnet.net #perlhelp

Implementare

Următoarele implementări de Perl sunt disponibile:

  • Strawberry Perl
  • Vanilla Perl
  • ActiveState Perl
  • Alte distributii

Installer pentru Perl și alte pachete

  • Camelbox

Disponibilitate

LAMP poate cuprinde și Perl

Perl este disponibil pe sistemele de operare Windows, *UNIX, Linux și Mac OS X.

Structura Limbajului

Program exemplu

#!/usr/bin/perl
print "Hello, world!\n";

Tipuri de date

  • Scalari
$a = 12;
$b = 'foo';
$c = 3.14324324234;
    • Referințe către scalari , liste și hash-uri
  • Liste(sau Array)
    • anonime
  ('a','foo',123)
  
  • Referința la o lista în următorul mod
  my @lista = (1,2,3);
  my $referinta_la_lista = \@lista;
  
  • Hash(cu chei unice)
%hash = (
  foo => 'bar' ,
  tar => 123 , 
)
  • blessed-hashes , blessed-scalars. Cu aceste tipuri de date se pot construi obiecte și deci OOP.[4][5][6][7][8]

Structuri de control

  • for(@lista){...} sau for my $iter(@lista){ $iter...} sau expr for expr sau for($i=0;$i<$j;$i++){...}
  • foreach(@lista){...}
  • while(expr){...} sau expr while expr;
  • until(expr){...} sau expr until expr;
  • if(expr)
  • unless(expr) - acealsi lucru cu if(!expr)
  • grep {block} (lista) ( returnează doar elementele din lista pt care block e evaluat true)
  • map { block } (lista) ( returnează o lista cu valorile returnate de block pentru fiecare element din lista)
  • each pentru iterarea unui hash după tuplu (cheie,valoare)
  • given/when este varianta de switch din C/C++ a lui Perl , introdusa in Perl 5.10
  • sort { comparator } (array) . sortează o listă după funcția "comparator" care returnează -1,0,1 în funcție de $a și $b care sunt variabilele comparate
  • next , continue
  • shift , unshift , push , pop sunt operații pentru liste/stive în Perl
  • eval(expr). În cazul în care expresia expr produce o eroare, aceasta e stocată în $@

Toate structurile repetitive pot fi antepuse sau postpuse în Perl.

Observație: În Perl do nu este structură de control repetitivă.

Subrutine

  • Se declară cu
sub _numele_subrutinei_ {
 # code here
}
  • Se apelează cu
_numele_subrutinei_( _parametri_ );
  • În subrutină parametrii se regăsesc în @_

Ei pot fi accesați cu @_[index] sau $_[index].

  • Exemplu
#!/usr/bin/perl

use strict;
use warnings;

display('foo');

sub display {
    my $message = shift; 
      # shift se face implicit pe @_
      # o alta metoda e: my ($message) = @_
   print $message;
}

Observație: nu e obligatoriu ca subrutina să fie definită înaintea apelului acesteia (ca în cazul C-ului de exemplu)

În general dacă sunt mai mulți parametri se poate folosi

sub display {
     my ($param1,$param2,$param3) = @_;
}

Interfețe pentru baze de date

DBI

use DBI;

my $dbh = DBI->connect($data_source, $username, $auth, \%attr); // conectarea la o bază de date
my $query = $dbh->do("query");
// sau
my $query = $dbh->prepare("query");
$query->execute($argumente);

Module importante Perl

  • Framework pentru OOP Moose
  • Framework-uri web
    • Catalyst
    • CGI::Application
    • Dancer
    • Mojolicious
  • Framework pentru programare concurentă POE
  • ORM pentru Perl DBIx::Class
  • Motor de templetizare TT
  • Module pentru serializarea structurilor de date(folositoare printre altele și pentru debugging) Data::Dumper Data::Dump::Streamer Data::TreeDumper
  • Modul pentru extragerea informațiilor din fișiere format HTML/XML HTML::TreeBuilder HTML::TreeBuilder::XPath
  • Modul pentru automatizare pagini web WWW::Mechanize Gungho

Contra

Perl este deseori criticat ca fiind 'line-noise' pentru că structura limbajului poate produce cod aparent ilizibil. Există concursuri de Perl golf( 1 Arhivat în , la Wayback Machine. , 2 Arhivat în , la Wayback Machine. ), și Perl obfu.

Note

  1. ^ „Perl 5.24.0 is now available!”. www.nntp.perl.org. Accesat în . 
  2. ^ „Perl Licensing”. dev.perl.org. Accesat în . 
  3. ^ perlintro(1) man page
  4. ^ Documentație perltoot
  5. ^ Documentație perlboot
  6. ^ Documentație perlobj
  7. ^ Documentație overload
  8. ^ Moose

Hiperlegături

  • en Pagina de manual
  • en Perlmonks.org
  • en Știri din comunitatea Perl
  • en articole Perl perl.com Arhivat în , la Wayback Machine.
  • en Implementarea Rakudo a limbajului Perl6
  • de Forum Perl(in limba germana)
  • ro Expresii regulate in Perl Arhivat în , la Wayback Machine.
  • ro Expresii regulate in Perl (Sabin Corneliu Buraga, Victor Tarhon-Onu)
  • v
  • d
  • m
Aplicații web frameworks
ASP.NET
  • ASP.NET Dynamic Data
  • ASP.NET MVC
  • ASP.NET Web Forms
  • BFC
  • DotNetNuke
  • MonoRail
  • OpenRasta
  • Umbraco
ColdFusion
  • CFWheels
  • ColdBox Platform
  • ColdSpring
  • Fusebox
  • Mach-II
  • Model-Glue
Common Lisp
  • Caveman2
  • CL-HTTP
  • UnCommon Web
  • Weblocks
C++
  • CppCMS
  • Wt
Haskell
  • Happstack
  • Yesod
  • Snap
Java
  • AppFuse
  • Flexive
  • Grails
  • GWT
  • ICEfaces
  • ItsNat
  • JavaServer Faces
  • JHipster
  • Jspx
  • OpenXava
  • Play
  • Reasonable Server Faces
  • Remote Application Platform
  • RIFE
  • Seam
  • Spring Framework
  • Stripes
  • Struts
  • Tapestry
  • Vaadin
  • WebWork
  • Wicket
  • WaveMaker
  • ZK
JavaScript
  • Ample SDK
  • AngularJS
  • Backbone.js
  • Chaplin.js
  • Closure
  • Dojo Toolkit
  • Ember.js
  • Express.js
  • Ext JS
  • jQuery
  • Meteor
  • MooTools
  • Node.js
  • Prototype
  • Rico
  • script.aculo.us
  • Sencha Touch
  • SproutCore
  • Wakanda
Perl
  • Catalyst
  • Dancer
  • Mason
  • Maypole
  • Mojolicious
  • WebGUI
PHP
  • CakePHP
  • CodeIgniter
  • Drupal
  • eZ Publish
  • Fat-Free
  • FuelPHP
  • Horde
  • Joomla!
  • Kohana
  • Laravel
  • Lithium
  • Midgard
  • MODX
  • Nette Framework
  • Phalcon
  • PRADO
  • Qcodo
  • Silex
  • SilverStripe
  • Symfony
  • TYPO3
  • WordPress
  • Xaraya
  • XOOPS
  • Yii
  • Zend Framework
Python
  • BlueBream
  • CherryPy
  • Django
  • Flask
  • Grok
  • Nevow
  • Pyjamas
  • Pylons
  • Pyramid
  • Quixote
  • TACTIC
  • Tornado
  • TurboGears
  • web2py
  • Webware
  • Zope 2
Ruby
Scala
  • Lift
  • Play
  • Scalatra
Smalltalk
  • AIDA/Web
  • Seaside
Alte limbaje
  • Application Express (PL/SQL)
  • COBOL on Wheelchair (COBOL)
  • Grails (Groovy)
  • Kepler (Lua)
  • OpenACS (Tcl)
  • SproutCore (JavaScript/Ruby)
  • SymbolicWeb (Clojure)
  • Yaws (Erlang)
Control de autoritate
  • BNE: XX542605
  • BNF: cb124906490 (data)
  • GND: 4307836-9
  • LCCN: sh95010633
  • NKC: ph117992