2009-07-22 11 views
5

Sono in procinto di rispondere a una richiesta di offerta per un contratto che richiede una buona quantità di elaborazione del testo. Il problema principale è che il cliente vuole essere in grado di eseguirlo su qualsiasi piattaforma UNIX (HPUX, Solaris, AIX, FreeBSD) o Linux (SLES, RHEL), che potrebbe limitare ciò che uso per farlo. Non vogliono rendere l'installazione di strumenti aggiuntivi un pre-requisito.Esistono piattaforme Unix in cui Perl non è installato per impostazione predefinita?

Sono combattuto tra Perl e awk. So che Perl è uno strumento ideale per l'elaborazione del testo (e sono ragionevolmente abile a farlo) ma, prima di inserire la risposta RFT per cui sarà richiesto Perl, mi piacerebbe scoprire se qualcuno è in esecuzione su una piattaforma dove Perl non è installato per impostazione predefinita.

Sarebbe utile elencare tali piattaforme nella RFT e offrire al cliente l'opzione del modo in cui vogliono andare. Ho un vago ricordo che non è su FreeBSD nell'installazione di default e potrebbe anche essere che anche le piattaforme non Linux non ce l'hanno.

Qualsiasi altro strumento può essere suggerito ma, data la mia familiarità con Perl e awk, probabilmente saranno gli unici nella lista.

risposta

13

È possibile ottenere una versione di Perl compilata per quasi tutte le varianti di Unix. Perl non deve essere "installato", ma può essere eseguito all'interno della directory dell'applicazione. Raggrupperei Perl con la mia distribuzione, così puoi assicurarti di avere la stessa versione.

È molto difficile scrivere uno script di shell completamente multipiattaforma, senza eseguire test sul sistema operativo di destinazione. Se sviluppi uno script awk, probabilmente svilupperai la variante GNU su Linux, che è un superset dello POSIX awk. Sto spesso configurando la fonte di apertura packages on Solaris, e trovo costantemente dei problemi in cui le persone assumono che tu stia utilizzando una versione moderna di uno strumento. Ad esempio, su Solaris bash non è la shell standard di Bourne (/ bin/sh), e echo non accetta alcun parametro. Se provi a codificare con POSIX awk, potresti trovarti limitato dalla libreria regex o da convenzioni obsolete.

Perl's artistic licens e consente di associarlo al programma, purché si seguano alcune semplici operazioni, ad esempio mantenere il copyright intatto.

+0

In realtà, questa è una buona idea (raggruppamento in una sottodirectory) poiché mi permette di controllare anche la versione, anche se dovrò spedire più pacchetti (o un pacchetto con molte subdirectory perl selezionate in fase di esecuzione, una per piattaforma). Controllerò la licenza. +1. – paxdiablo

3

Quasi ogni * nix (tranne alcuni per lo spazio su disco molto limitato) ha installato Perl. AFAIK, anche FreeBSD. Nel caso in cui non lo fosse, puoi trasformare il programma Perl in un eseguibile che non avrà bisogno di perl con PAR::Packer.

+1

Perché * even * FreeBSD? –

+0

@Sinan, sto indovinando "anche BSD" dal momento che pensavo vagamente di non averlo spedito come standard, ma attraverso le porte. – paxdiablo

+2

@Pax Duh! La sua risposta ha un senso allora. Ho usato FreeBSD dalla versione 5 e tutti avevano installato Perl di default. Il sistema Perl tende ad essere più vecchio delle porte Perl, ma c'è uno script di shell che permette a root di selezionare quale Perl sarà predefinito. –

2

anche se Perl potrebbe essere installato su quasi tutte le piattaforme * nix, potrebbe non essere la stessa versione, quindi tenete presente questo. Con il requisito che deve funzionare sulla maggior parte * nix, puoi semplicemente programmare con le utilità di shell +. Per analizzare i file, anche awk + shell può fare il lavoro. devi solo scriverlo in un formato "portatile". controllare this per ulteriori informazioni

+1

uno degli obiettivi di Perl (a differenza di molti altri linguaggi) deve essere molto compatibile tra le versioni, quindi è necessario scrivere solo per la versione minima. –

+1

Immagino che questo sarebbe Perl 5.6. – innaM

+2

Ci sono alcune (molto strane) piattaforme che non hanno buone porte Perl oltre le 5,004, ma in genere 5,6 è un buon bersaglio - è in uso dal 2000. – ephemient

4

Se il client non dispone di Perl sulle proprie macchine, è sempre possibile utilizzare Par::Packer per creare un eseguibile per tale piattaforma. Ciò significa anche che non devi preoccuparti di utilizzare i moduli, poiché saranno inclusi anche nell'eseguibile.

+0

Stai attento se il modulo usa una licenza non permissiva come AGPL o qualcosa. Dovrai effettivamente distribuire il codice sorgente per i moduli che utilizzi. Non difficile, ma può essere un dolore. – Weegee

+0

Hmm, direi che, si può recuperare l'origine dall'eseguibile e, a patto che non lo si modifichi, CPAN dovrebbe contare come rendere disponibile la fonte. –

+0

@Weegee, Par :: Packer elimina semplicemente i file, quindi è banale estrarre qualsiasi codice. LGPL potrebbe richiedere all'utente di creare nuovi eseguibili con il loro codice modificato, il che potrebbe essere un problema. Il modo più semplice per affrontarlo è includere tutte le librerie interessate in un file par separato. Il tuo file principale può quindi caricare il file secondario. – daotoad

2

Anche se suppongo che tutte le versioni correnti dei sistemi operativi che si menzionano installino Perl, ci saranno naturalmente versioni precedenti che non ne hanno e non hanno. Dovresti anche essere consapevole del fatto che anche strumenti come awk non sono stati installati di routine su versioni UN * X molto vecchie, dato che questo e altri strumenti di programmazione erano extra opzionali (ad un costo extra). Ricordo sistemi Altos dove anche lo stack TCP/IP è stato un elemento di costo aggiuntivo, ma presumibilmente non andrò così indietro :-)

Bottom line: Se la vostra applicazione ha davvero bisogno Perl si dovrebbe verificare è installato (tramite uno script di shell Bourne - se theat non funziona, sei davvero fregato) e se non fornisci un modo per installarlo.

0

Gli Unici commerciali tendono ad essere associati a versioni molto vecchie di Perl.

Problemi correlati