2009-09-29 2 views
21

Ho sentito che Perl è il linguaggio go-to per la manipolazione delle stringhe (e il rumore della linea;). Qualcuno può fornire esempi e confronti con altre lingue per mostrarmi perché?Perché Perl è la scelta migliore per la maggior parte delle attività di manipolazione delle stringhe?

+3

http://www.google.com/search?q=perl+regex –

+3

Non sono sicuro del motivo per cui hai fatto questa domanda. Stai cercando un tutorial perl? O vuoi sapere se investire tempo nell'apprendimento di Perl? – Ashwin

+0

Opzione B. Ho scritto uno script lua abbastanza complesso che è una specie di manipolazione di stringhe e mi chiedo se sarebbe molto più semplice in perl. – RCIX

risposta

17

È molto soggettivo, quindi non direi che Perl è la scelta migliore, ma è certamente una scelta valida per la manipolazione delle stringhe. Altre alternative sono Tcl, Python, AWK, ecc.

Mi piacciono le capacità di Perl perché ha un eccellente supporto (meglio di POSIX come indicato nel commento) per regex veloci e le variabili implicite facilitano il semplice scricchiolio delle stringhe con pochissimo codice

Se si dispone di uno * sfondo nix, molto di quello che già si applica si applica anche a Perl, il che rende abbastanza facile la raccolta per molte persone.

+3

In realtà, è piuttosto obiettivo, quando si tratta di [regex, Perl ha più funzionalità rispetto allo standard POSIX] (http://en.wikipedia.org/wiki/Regular_expression#Perl-derivative_regular_expressions). – xxxxxxx

+1

@ spx2: abbastanza giusto. La parte soggettiva era se qualcuno avrebbe considerato Perl come la lingua da seguire in tutti i sensi. Alcune persone non sono troppo arrabbiate con Perl in generale, quindi potrebbero non preferirlo nonostante le sue abilità regex. –

+0

down voter, per favore lascia un commento. –

5

È una domanda molto soggettiva. Forse la vera risposta è che Perl ha una bella sintassi (inclusa la sintassi regex) che rende le persone desiderose di firmare elogi su altre lingue? IMHO, qualsiasi linguaggio che supporti una sintassi ricca di espressioni regolari sarebbe considerevolmente potente alla manipolazione delle stringhe.

+0

La ragione per cui la gente vuole cantare le lodi è che Perl è molto potente in tutti i modi che contano, anche nelle metriche molto importanti dello "sforzo impiegato per sviluppare software con funzionalità X". – DVK

1

All'inizio, Perl è stato sviluppato per semplificare l'elaborazione dei report e gestire i file di testo, quindi ha un supporto REGEX molto forte. La maggior parte delle informazioni su REGEX è disponibile in perldoc.

4

Kids in questi giorni! Nel giorno, tutto ciò che avevamo era SNOBOL - e ci piaceva! Provalo qualche volta ... non si sa mai, si potrebbe desiderare qualcosa di rispettabile su cui ricorrere quando questa moda Perl fa il suo corso!

+2

+1 lol ... (15 caratteri) – RCIX

2

Perl è ampiamente utilizzato per attività di manipolazione di stringhe poiché l'API di manipolazione delle stringhe è facile da apprendere. E anche la sua regex è ampiamente usata. È in uso da molto tempo e chiunque abbia uno sfondo Unix potrebbe prendere molto facilmente perl. Storicamente, perl è stato sviluppato alla fine degli anni '80 per le attività di elaborazione dei report ed è stato "originariamente" sviluppato per le attività di elaborazione del testo. Quindi, fino alla data, la tendenza continua come chiunque con un compito di manipolazione delle stringhe o attività di elaborazione del testo opterebbe per perl come prima scelta. Non è che altre lingue come Python non siano all'altezza del compito, ma perl è popolare in quest'area.

13

Perl -> Practical Extraction and Report Language

forza di Perl (quando si tratta di elaborazione delle stringhe) si trova in è molto potente Regular expression engine.

Per questo motivo ci sono molte persone nel campo della BioInformatica che utilizzano Perl come strumento principale , da cui il numero elevato di post su BioPerl on PerlMonks. In BioInformatics lavorano molto con le stringhe, le chiamano "sequenze" (non ne so molto).

Perlmonks.org è il cuore della comunità Perl, controlla l'immenso numero di colpi quando si cerca site:perlmonks.org regex 20,000 hits

Non si può ignorare il gran numero di moduli on CPAN:

Questa è una prova molto chiara del fatto che Perl è un linguaggio molto potente quando si tratta di elaborazione delle stringhe.

Quindi, se si vuole fare un po 'la manipolazione di stringhe e si sta utilizzando Perl, ce l'hai coperto :)

+7

Il motore regex del perl non viene chiamato PCRE. PCRE è un "clone" con funzionalità limitate del motore regex di perl. – jrockway

+1

@jrockway, grazie, hai ragione. Ma da wikipedia: A partire da Perl 5.9.4, PCRE è anche disponibile in sostituzione del motore di espressioni regolari predefinito di Perl tramite il modulo re :: engine :: PCRE. – xxxxxxx

+1

Non fidarti di tutto ciò che leggi su Wikipedia. :) –

8

Per affrontare la seconda parte della tua domanda: la reputazione di Perl per il rumore proviene dalla linea di 4 tipi di persone:

  • Troppo intelligenti (per il loro bene) hacker (o talvolta semplicemente hack) che apprezzano intelligenza e in mostra sopra la leggibilità. "Se fosse difficile da scrivere dovrebbe essere difficile da leggere" NON è solo un atteggiamento mitico.

  • Le persone che non conoscono il buon sviluppo del software se li colpisce in testa con un cluebat. Ad esempio le persone che salvano un paio di caratteri in un programma utilizzando $_ anziché una variabile denominata. In un ambito annidato. O mai sentito parlare di commenti. O identificatori auto-documentanti. O spazi bianchi.

  • Le persone che pensano che lo sviluppo del software == codice golf. Più seriamente, tanto minore è la quantità di caratteri nel codice, tanto più è leggibile, perché non capiscono cosa significhi "concisione" nel codice.

    (NOTA: primi 2 set non si escludono a vicenda)

  • Le persone che il codice/hack perl (ad esempio gli amministratori di sistema) che hanno una formazione molto poco, esperienza o incentivo a fare lo sviluppo del software. Per esempio. la percentuale di persone che usano Perl che fanno hack veloci e sporchi con uno stile cattivo e una qualità del codice peggiore è probabilmente più alta di, per esempio, Python.

    Solo per riferimento, l'80% di "codice" Perl terribile nel mio lavoro $ ricade sotto questo - è stato scritto da analisti finanziari che sono abbastanza intelligenti da prendere un libro Perl e alcuni script precedenti, clonare uno script che fa quello che serve l'impresa, e non hanno background di programmazione/CS per preoccuparsi di quanto leggibile/manutenibile fosse il loro codice.

In altre (e meno maligne) parole, è possibile scrivere belle, incredibilmente leggibile e di facile manutenzione software in Perl. Tutto dipende da chi fa la scrittura, quali sono le sue priorità e competenze. Inoltre, , proprio come con qualsiasi altra lingua, puoi scrivere un miserabile pasticcio di sola scrittura con esso.

La differenza da altri linguaggi è che molto spesso, la sola scrittura di tale mess, quando eseguita in Perl, è costituita da una densità molto alta di caratteri non letterali (sylg e caratteri speciali in RegExes scritti male). Questa alta densità può infatti, in modo asintotico, approssimarsi al rumore di linea.

+2

Prefaggerò questo con: mi piace perl. Tuttavia non è solo il programmatore a incolpare la reputazione di Perl di linenoise. Perl, a differenza della maggior parte delle lingue, consente di eseguire molte cose in modo implicito (come le variabili $ _, $ 0, etc, argomenti impliciti per le funzioni, ecc.) In cui non devi dichiarare esplicitamente di voler fare qualcosa, ma perl farà qualcosa di ragionevole. Questa è una misura di risparmio di tempo meravigliosa, ma è assolutamente incomprensibile per coloro che non capiscono la semantica. Confronta questo con Python, che è un linguaggio che quasi chiunque può leggere anche senza aver scritto Python. – Falaina

+1

Perl ha gli argomenti impliciti di cui parli. E come programmatore puoi scegliere di usarli o meno. – xxxxxxx

+0

@ spx2 - Amen. @Falaina - Questo è ESATTAMENTE quello di cui stavo parlando. Nessuno sviluppatore di software che valga la pena di parlare sarebbe preso in giro usando $ _, io stesso incluso, al di fuori della rapina a 5 linee eprsonal. – DVK

6

Perché è perl fatto perl fatto. Perché Perl è espressivo, potente e veloce. Ho battuto molte volte prodotti specializzati con script piccoli e sporchi in perl scritti in pochi minuti. Ad esempio, outer join e large join vs. MySQL (solo perché non può fare unire join), elaborazione ETL vs Java Hadoop (perché ho anni di esperienza per scriverlo in modo efficace e perl IO layer è semplicemente fantastico) e così e così .

1

Non sono d'accordo sul fatto che Perl sia la lingua migliore per l'elaborazione del testo.Le cose semplici sono facili; per sostituire foo con bar:

$data =~ s/foo/bar/g; 

Le cose più difficili non sono semplici, però. Guarda Data::SExpression, per esempio. È molto codice fare qualcosa di molto semplice.

Un'implementazione simile in Haskell con Parrow sembra qualcosa di simile:

import Text.ParserCombinators.PArrow 

data Atom = QuotedString String | Symbol String 
      deriving (Show, Eq) 

data Sexp = Sexp [Sexp] | Atom Atom 
      deriving (Eq) 


quotedString :: Char -> Char -> MD a Atom 
quotedString quoteChar escapeChar = between q q inside >>^ QuotedString 
    where q = char quoteChar 
      inside = many $ (char escapeChar >>> anyChar) <+> notChar quoteChar 

doubleQuotedString, symbol :: MD a Atom 
doubleQuotedString = quotedString '"' '\\' 
symbol = word >>^ Symbol 

atom, sexp :: MD a Sexp 
atom = (doubleQuotedString <+> symbol) >>^ Atom 
sexp = atom <+> (between (char '(') (char ')') sexp' >>^ Sexp) 
     where sexp' = sepBy1 sexp spaces 

solo dicendo. Perl non è l'end-all-and-be-all della manipolazione del testo. Ci sono molti motivi per preferire Perl ad altre lingue, ma l'analisi non è una di queste.

+0

http://search.cpan.org/perldoc/Data::SExpress –

+0

Non è possibile scrivere il modulo Text.ParserCombinators.Prow in perl? È nuovo per me. –

+0

Non impossibile. Inoltre non fatto. La domanda è "perché usare Perl per i parser", non "perché usare Perl per scrivere una libreria combinatore di parser". La risposta alla seconda domanda non è la stessa della risposta al primo. – jrockway

0

Perl era la lingua di riferimento per molto tempo. Il problema è che può essere abbastanza disordinato e difficile da mantenere (alcune persone possono scrivere in Perl che lo evita, ma è molto facile scrivere codice brutto). Non ti direi di evitare Perl, ma molti si sono spostati su alternative moderne.

Consiglierei l'apprendimento di uno dei linguaggi di scripting più recenti come Python o Ruby. Entrambi funzioneranno molto bene per le tue esigenze e potranno facilmente gestire compiti più difficili in seguito. Sono entrambi molto gentili con cui lavorare, dopo aver scritto C e Perl per così tanto tempo.

In breve, Perl sarebbe un buon martello per questo chiodo. Python e Ruby sarebbero pistole sparachiodi.

+0

Python non è moderno (ha quasi la stessa età del Perl), ma Ruby lo è. –

+2

Dai. 1993 (o 1995) (Ruby) http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 vs 1991 (Python). Nemmeno è esattamente un bambino. –

2

Mi piace molto il Perl, scrivo libri su di esso, pubblico una rivista e così via. Non penso che direi mai che è la lingua migliore in cui fare qualcosa. Molto dipende dal compito che devi svolgere. Per molte attività di elaborazione delle stringhe, ETL, pulizia dei dati e così via, Perl è un linguaggio molto forte e capace. Non avresti problemi a svolgere semplici compiti.

Il tuo commento sembra uscito dai primi anni '90, anche se il resto del mondo non l'aveva raggiunto. Molti dei linguaggi dinamici sono ora operativi, quindi potresti non dover cambiare lingua. Se decidi di usare Perl e ti imbatti in problemi, qui ci sono molte persone che sono disposte ad aiutare e non tutti ci sbaglieranno se sceglierai qualcos'altro. :)