Movatterモバイル変換


[0]ホーム

URL:


Hopp til innhold
Wikipedia
Søk

Perl

Fra Wikipedia, den frie encyklopedi
Perl
Tilblivelse1987
ParadigmeMulti-paradigme
Designet avLarry Wall
Utviklet avLarry Wall,The Perl Foundation
Siste versjon(er)5.42.0 / 3. jul. 2025
Versjon(er) i utvikling5.23.2, 5.25.10, 5.29.7
Typetildeling dynamisk
OSLinux,macOS,Microsoft Windows,Solaris,AIX,HP-UX
LisensArtistic License,GNU General Public License, version 1.0 or later
Implementert i
C
Påvirket av
C++,C,sed,Awk,BASIC,Lisp,Unix-skall

Perl, uoffisielt også kaltPractical Extraction and Report Language, er etprogrammeringsspråk som ble utgitt avLarry Wall18. desember1987. Språket «låner» mye av sin funksjonalitet fra for eksempelC,Unix-skripting (sh),awk,sed,Lisp og (i mindre grad) mange andre programmeringsspråk.

Filosofi

[rediger |rediger kilde]

Perl ble laget for å være et praktisk språk for å prosessere filer og hente ut og generere tekstlig informasjon. Et avmottoene er «There's more than one way to do it» (TMTOWTDI – uttales «Tim Toady»), som direkte oversatt til norsk betyr «det er mer enn én måte å gjøre det på». Et motto for språket var å gjøre «enkle oppgaver enkle å løse, og vanskelige oppgaver mulige å løse».

Perl har direkte støtte forregulære uttrykk i sinsyntaks for enkel og kraftig tekstprosessering, og språket er ofte betegnet som det typiskeskriptspråket og har blitt kalt «limet som holderwebben sammen» på grunn av språkets popularitet som «CGI-språk».

Historie

[rediger |rediger kilde]

Larry Wall, utdannetlingvist, skapte versjon 1.0 mens han jobbet som systemadministrator hosNASA i 1987. Hans formål var å lage et generelt scriptspråk forUnix for å forenkle rapportprosessering. Bruken av Perl nådde nye høyder i den første tiden daWorld Wide Web tok av rundt 1994, og ble de neste 3-4 årene av mange ansett som en de-facto standard for å lage dynamiske nettsider (webapplikasjoner) medCGI og databasekobling. Medmod_perl forApache og rammeverk somCatalyst, Mason m.fl. brukes Perl fortsatt til web-programmering selv om andre språk har blitt mer populære.

Perl 6 og Raku

[rediger |rediger kilde]

Utviklingen av Perl 6, senere kallt Raku, har foregått samtidig med at Perl 5 også utvikles med årlige oppgraderinger. Perl 6 var rundt år 2000 tenkt som neste utgave av Perl 5, men endte opp som et nytt språk og er ikke bakover-kompatibelt. Perl 6 tok opprinnelig i brukParrot, envirtuell maskin som ble utviklet parallelt med tanke på å støtte flereprogrammeringsspråk. I 2014.08-utgaven[1] så byttet Perl 6 sin virtuelle maskin tilMoarVM. Med 2019.11[2] utgaven byttet språket navn tilRaku for å gjøre språkets betydelige forskjeller fra Perl tydeligere.

Raku styrker bl.a. støtten for grammatikker,funksjonell programmering med blant annet "lazy evaluation" og objekt-orientert programmering. Raku finnes i flere implementasjoner derRakudo av mange anses som den offisielle.

Perl 6 ble utgitt24. desember2015.[3]

Innebygde datatyper

[rediger |rediger kilde]

Perl har en rekke innebygde datatyper, hvorav de vanligste:

  • Skalarer (en.scalars) kan holde en enkelt verdi, f.eks. en tekststreng, et nummer eller enreferanse.
  • Tabeller (en.arrays) kan holde flere skalarer basert på en indeks (som starter ved posisjon 0).
  • Assosiative tabeller (en.hashes) er uordnede samlinger bestående av skalarer som er indeksert på basis av den assosierte nøkkelen.
  • Filpekere (en.file handles) kan holde styr på posisjon, lesing, skriving osv. for filer,pipes,sockets og lignende.
  • Katalogpekere (en.directory handles) kan tilsvarende holde styr på kataloger.
  • Subrutiner (en.subroutines) kan holde brukerdefinerte funksjoner, metoder ogclosures.

Verdier av disse typene (og flere) kan tilordnes navngittevariabler. Et tegn, «sigil», foran variabelnavnet angir vanligvis hvilken datatype vi får fra en variabel, uavhengig av hva slag datatype(r) som er tilordnet variablen.

«$» foran variabelnavnet gir en skalar, om variabelen holder en skalar, en tabell (med indeks) eller en hash (med indeks):

$foo                  # en enkel skalar $foo$maaneder[11]         # det 12. elementet i tabellen @maaneder$adresse{'Per'}       # elementet med nøkkelen 'Per' i hashen %adresse

«@» foran variabelnavnet gir en liste, om variabelen holder en tabell (med eller uten indeks) eller en hash (med indeks):

@maaneder             # ( $maaneder[0], $maaneder[1], ..., $maaneder[n] )@maaneder[2,3,4]      # samme som ( $maaneder[2], $maaneder[3], $maaneder[4] )@adresse{'Per','Ola'} # samme som ( $adresse{'Per'}, $adresse{'Ola'} )

«%» foran variabelnavnet gir en liste bestående av nøkler og verdier i parvis vilkårlig rekkefølge, om variabelen holder en hash:

%adresse              # samme som ( 'Per', $adresse{'Per'}, 'Ola', $adresse{'Ola'} ),                      # gitt nøklene 'Per' og 'Ola', i den rekkefølgen

«&» foran variabelnavnet gir en subrutine. Dette brukes vanligvis ikke ved kall til subrutinen, men noe oftere for å ta en referanse til den:

$ref = \&bar;

Variabelnavnet uten noe tegn foran kaller en subrutine hvis det følger parenteser eller hvis subrutinen er deklarert; ellers gir det vanligvis en fil- eller katalogpeker, avhengig av bruk:

foo(1,2,3);           # kaller subrutinen &fooclose bar;            # (lukker) filpekeren barclosedir baz;         # (lukker) katalogpekeren baz

Eksempler på syntaks

[rediger |rediger kilde]

Hello, world!

[rediger |rediger kilde]
#!/usr/bin/perl -wprint "Hello, world!\n";

Løkker

[rediger |rediger kilde]
while (uttrykk ) {    ...}
do {    ...} while (uttrykk );
do {    ...} until (uttrykk );
for (liste ) {    ...}
foreach (liste ) {    ...}
for (initialisering ; termineringsbetingelse ; økningsgrad ) {    ...}

If-then

[rediger |rediger kilde]
if (uttrykk ) {    ...}
unless (uttrykk ) {    ...}
if (uttrykk ) {    ...}else {    ...}
if (uttrykk ) {    ...}elsif (uttrykk ) {    ...}else {    ...}

Særtrekk ved Perl sammenlignet med mange andre språk

[rediger |rediger kilde]
  • Konstruksjonenefor,while,if m.fl. kan valgfritt legges bak det som utføres hvis det kun består av ett uttrykk;
 say "$_ er primtall" for 2, 3, 5, 7, 11, 13; funksjon( pop @oppgaver ) while @oppgaver; say "$n er oddetall" if $n % 2 == 1;

Subrutiner

[rediger |rediger kilde]

Subrutiner spesifiseres med nøkkelordetsub. Argumenter til subrutinen er tilgjengelige som elementer i den lokale (for subrutinen) tabellen@_. Kaller man en subrutine med tre argumenter, blir disse representert som@_[0],@_[1] og@_[2] i subrutinen. Merk at disse elementene blir referert til som skalarene$_[0],$_[1] og$_[2]. Funksjonenshift kan også benyttes for å få tak i hver av verdiene.

Endres noen av elementene i@_ i subrutinene, reflekteres også denne endringen i programmet som kalte subrutinen.

Subrutiner returner vanligvis resultatet av det siste uttrykket, men en eksplisittreturn-verdi kan angis og anbefales for å gjøre det helt klart hvaprogrammereren faktisk ønsker å returnere.

Eksempel:

subkube{my$x=shift;return$x**3;}$z=-4;$y=kube($z);print"$y\n";

Navngitte argumenter kan simuleres ved å gi subrutinen enhash som inn-argument:

subhallo{my%person=@_;return"Hallo, $person{fornavn} $person{etternavn}!\n";}printhallo(fornavn=>'Ola',etternavn=>'Nordmann',);

Perl har i nyere versjoner fått støtte for parameternavngivning som ligner mer på andre språk:

subpytagoras($x, $y) {sqrt($x**2+$y**2);}

Moduler

[rediger |rediger kilde]

Man kan samle funksjoner i enbiblioteksfil. I sin enkleste form kan dette gjøres slik i filen modtest.pm:

# definer navn på pakkepackagemodtest;# strict og warnings hjelper deg i debugging, og hindrer deg# å skrive slurvete kode.usestrict;usewarnings;# trengs for å kunne eksportere funksjoneruseExporter();our@ISA=qw( Exporter );# her eksporterer vi funksjoneneour@EXPORT=qw( hello helloname );subhello{print"hello world\n";}subhelloname{my$name=shift;# henter første innverdiprint"hello $name\n";}## returner 1 etter initiering av modul1;

Modulen brukes så på følgende måte:

#!/usr/bin/perlusestrict;usewarnings;usemodtest;hello();helloname("you");#end..

Merk at modulen ( modtest.pm ) må ligge i en av perls systemmapper ( se hva som ligger i@INC ).

CPAN

[rediger |rediger kilde]

CPAN, Comprehensive Perl Archive Network, ble opprettet på slutten av nittitallet og er der man finner utvidelser til Perl (moduler), og er ansett for å være en av Perls største styrker. Over 7 000 programmerere fra hele verden har bidratt med over 15 000 moduler.

Perl og databaser

[rediger |rediger kilde]

DBI-grensesnittet er den CPAN-modulen som oftest blir brukt for å kommunisere med de flesteANSISQL-databasene, som f.eks.MySQL,PostgreSQL,Oracle ogSQLite.

Andre språk

[rediger |rediger kilde]

Perl har inspirert flere andre språk, blant annetPHP ogRuby. Vanlige alternativer til Perl erPython,Ruby og tildelsGrails. Perl er laget iC og en del av de vanligste utvidelsene (modulene) på CPAN er helt eller delvis skrevet i C. Ved hjelp av modulenInline::C, XS eller SWIG kan C-biblioteker (objekt-filer) bli tilgjengelige som moduler og subrutiner i Perl.

Referanser

[rediger |rediger kilde]
  1. ^«Release Release #79 ("Minsk") · rakudo/rakudo».GitHub (på engelsk). Besøkt 2. oktober 2021. 
  2. ^«Release Release #132 (2019.11) · rakudo/rakudo».GitHub (på engelsk). Besøkt 2. oktober 2021. 
  3. ^«An Unexpectedly Long-expected Party».Perl 6 Advent Calendar. 24. desember 2015. Besøkt 28. desember 2015. 

Eksterne lenker

[rediger |rediger kilde]
A# ·ActionScript ·Ada ·Alef ·ALGOL ·ALGOL 58 ·ALGOL 60 ·ALGOL 68 ·ALTRAN ·APL ·AppleScript ·Argus ·Assembler ·Autokode ·awk ·B ·BASIC ·BCPL ·BETA ·BitC ·BLISS ·Bourne Shell ·Bourne Again Shell ·C ·C++ ·C-- ·CHILL ·C# ·C shell ·Caml ·Ch ·Cilk · Cilk++ ·Cilk Plus ·Clarion ·Clipper ·CLISP ·Clojure ·CLU ·COBOL ·COMAL ·Common Lisp ·Concurrent C ·Concurrent Euclid ·Concurrent Pascal ·D ·Delphi ·Dylan ·ECMAScript ·Eiffel ·Emacs Lisp ·Erlang ·Euclid ·F* ·F# ·Forth ·Fortran ·GNU Common Lisp ·GNU Pascal ·Go ·Haskell ·HyperTalk ·Incr Tcl ·INTERCAL ·Interlisp ·Java ·JavaScript ·JRuby ·KornShell ·LaTeX ·Legoscript ·LilyPond ·Limbo ·Lisp ·LPC ·Lua ·Lynx ·Mary ·MATLAB ·Mesa ·ML ·MML ·Modula ·Modula-2 ·Modula-2+ ·MUMPS ·Objective-C ·Objective-C++ ·OCaml ·OpenVera ·O'Haskell ·Pascal ·Perl ·PHP ·Pike ·PL/I ·Plankalkül ·PLEX ·Prolog ·Protel ·Pure Data ·Python ·R ·Ratfor ·REXX ·RTL/2 ·Ruby ·Rust ·SAS ·Scala ·Scheme ·Scratch ·Simula ·SML ·Smalltalk ·SNOBOL ·Tcsh ·Tcl ·TECO ·TOM ·Turbo C ·Turbo C++ ·Turbo Basic ·Turbo Modula-2 ·Turbo Pascal ·Verilog ·Visual Prolog ·Turing ·TypeScript ·Vala ·VHDL ·Visual Basic
Oppslagsverk/autoritetsdata
Hentet fra «https://no.wikipedia.org/w/index.php?title=Perl&oldid=25318474»
Kategorier:
Skjulte kategorier:

[8]ページ先頭

©2009-2026 Movatter.jp