EnglishFranceseSpagnolo

Favicon di OnWorks

perlpragma - Online nel cloud

Esegui perlpragma nel provider di hosting gratuito OnWorks su Ubuntu Online, Fedora Online, emulatore online Windows o emulatore online MAC OS

Questo è il comando perlpragma che può essere eseguito nel provider di hosting gratuito OnWorks utilizzando una delle nostre molteplici workstation online gratuite come Ubuntu Online, Fedora Online, emulatore online Windows o emulatore online MAC OS

PROGRAMMA:

NOME


perlpragma - come scrivere un pragma utente

DESCRIZIONE


Un pragma è un modulo che influenza alcuni aspetti del tempo di compilazione o di esecuzione
comportamento di Perl, come "strict" o "warnings". Con Perl 5.10 non lo sei più
limitato al costruito in pragmata; ora puoi creare pragmata utente che modificano il
comportamento delle funzioni utente all'interno di un ambito lessicale.

A basic esempio


Ad esempio, supponiamo che tu debba creare una classe che implementi un sovraccarico matematico
operatori e vorresti fornire il tuo pragma che funzioni in modo molto simile a "usa
intero;" Ti piacerebbe questo codice

usa MyMaths;

my $l = MyMaths->new(1.2);
my $r = MyMaths->new(3.4);

stampa "A: ", $l + $r, "\n";

usa myint;
stampa "B: ", $l + $r, "\n";

{
niente di buono;
stampa "C: ", $l + $r, "\n";
}

stampa "D: ", $l + $r, "\n";

niente di buono;
print "E: ", $l + $r, "\n";

per dare l'output

A: 4.6
B: 4
C: 4.6
D: 4
E: 4.6

vale a dire, dove "usa myint;" è in effetti, le operazioni di addizione sono forzate a un numero intero, mentre
per impostazione predefinita non lo sono, con il comportamento predefinito ripristinato tramite "no myint;"

L'implementazione minima del pacchetto "MyMaths" sarebbe qualcosa del genere:

pacchetto MyMaths;
utilizzare gli avvisi;
usare rigorosamente;
usa myint();
usa l'overload '+' => sub {
mio ($l, $r) = @_;
# Passa 1 per controllare un livello di chiamata da qui
se (mio::in_effetto(1)) {
int($$l) + int($$r);
} Else {
$$l + $$r;
}
};

sottonuovo {
mia ($classe, $valore) = @_;
benedici \$valore, $classe;
}

1;

Nota come carichiamo il pragma utente "myint" con un elenco vuoto "()" per impedirne l'"importazione"
essere chiamato.

L'interazione con la compilazione Perl avviene all'interno del pacchetto "myint":

pacchetto myint;

usare rigorosamente;
utilizzare gli avvisi;

importazione secondaria {
$^H{"myint/in_effect"} = 1;
}

disimportazione sub {
$^H{"myint/in_effect"} = 0;
}

sub in_effetto {
mio $livello = shift // 0;
my $hinthash = (chiamante($livello))[10];
return $hinthash->{"myint/in_effect"};
}

1;

Poiché i pragmata sono implementati come moduli, come qualsiasi altro modulo, "use myint;" diventa

INIZIO {
richiedere myint;
myint->import();
}

e "no myint;" è

INIZIO {
richiedere myint;
myint->unimport();
}

Quindi le routine "import" e "unimport" sono chiamate at compilare tempo per il codice utente.

I pragmata utente memorizzano il loro stato scrivendo nell'hash magico "%^H", quindi questi due
le routine lo manipolano. Le informazioni sullo stato in "%^H" sono memorizzate nell'optree e possono essere
recuperato in sola lettura in fase di esecuzione con "caller()", all'indice 10 dell'elenco di restituiti
risultati. Nell'esempio pragma, il recupero è incapsulato nella routine "in_effect()",
che prende come parametro il numero di frame di chiamata da salire per trovare il valore di
pragma nello script dell'utente. Questo usa "caller()" per determinare il valore di
$^H{"myint/in_effect"} quando ogni riga dello script dell'utente è stata chiamata, e quindi
fornire la semantica corretta nella subroutine che implementa l'aggiunta in overload.

Le di denominazione


C'è solo un singolo "%^H", ma arbitrariamente molti moduli che vogliono usare il suo ambito
semantica. Per evitare di pestarsi i piedi l'un l'altro, devono essere sicuri di usare diversi
chiavi nell'hash. È quindi convenzionale per un modulo utilizzare solo chiavi che iniziano
con il nome del modulo (il nome del suo pacchetto principale) e un carattere "/". Dopodichè
prefisso identificativo del modulo, il resto della chiave dipende interamente dal modulo: può
includere qualsiasi carattere. Ad esempio, un modulo "Foo::Bar" dovrebbe usare chiavi come
come "Foo::Bar/baz" e "Foo::Bar/$%/_!". I moduli che seguono questa convenzione funzionano tutti bene
insieme.

Il core Perl usa una manciata di chiavi in ​​"%^H" che non seguono questa convenzione, perché
lo precedono. Le chiavi che seguono la convenzione non entreranno in conflitto con quelle del core
chiavi storiche.

Implementazione/Attuazione dettagli


L'optree è condiviso tra i thread. Ciò significa che esiste la possibilità che l'optree
sopravviverà al particolare thread (e quindi all'istanza dell'interprete) che ha creato
it, quindi i veri scalari Perl non possono essere memorizzati nell'optree. Viene invece utilizzata una forma compatta,
che può memorizzare solo valori interi (con e senza segno), stringhe o "undef" -
i riferimenti ei valori in virgola mobile sono stringati. Se hai bisogno di memorizzare più
valori o strutture complesse, dovresti serializzarli, ad esempio con "pack". Il
viene registrata la cancellazione di una chiave hash da "%^H", e come sempre può essere distinta dalla
esistenza di una chiave con valore "undef" con "exists".

non tentare di memorizzare i riferimenti alle strutture di dati come numeri interi che vengono recuperati tramite
"chiamante" e riconvertito, poiché questo non sarà threadsafe. Gli accessi sarebbero al
struttura senza lock (che non è sicura per gli scalari di Perl), e sia la struttura
deve perdere o deve essere liberato quando il suo thread di creazione termina, il che potrebbe essere
prima che l'optree che lo faccia riferimento venga eliminato, se altri thread sopravvivono.

Utilizzare perlpragma online utilizzando i servizi onworks.net


Server e workstation gratuiti

Scarica app per Windows e Linux

  • 1
    Cratere
    Cratere
    Crater è un web open-source e
    app di fatturazione mobile creata appositamente per
    liberi professionisti e piccole imprese.
    È la soluzione completa per la fatturazione
    hai bisogno...
    Scarica Cratere
  • 2
    formkiq-core
    formkiq-core
    FormKiQ Core è un documento open source
    Sistema di Gestione (DMS), a disposizione di
    eseguito come software headless o con a
    client basato sul Web, distribuito sul tuo
    Amazon Noi...
    Scarica formkiq-core
  • 3
    blackfriday
    blackfriday
    Blackfriday è un processore Markdown
    implementato in Go. È paranoico riguardo
    il suo input (così puoi alimentarlo in sicurezza
    dati forniti dall'utente), è veloce, esso
    supporta c...
    Scarica Black Friday
  • 4
    Origine QNAP NAS GPL
    Origine QNAP NAS GPL
    Fonte GPL per QNAP Turbo NAS.
    Pubblico: sviluppatori. Interfaccia utente:
    Basato sul web. Linguaggio di programmazione: C,
    Giava. Categorie:Sistema, Archiviazione,
    Sistema operativo Ker...
    Scarica QNAP NAS GPL Source
  • 5
    pulizia a fondo
    pulizia a fondo
    Uno script di Kotlin che distrugge tutte le build
    cache da progetti Gradle/Android.
    Utile quando Gradle o l'IDE te lo permettono
    giù. Lo script è stato testato
    macOS, ma...
    Scarica pulizia profonda
  • 6
    Plug-in Eclipse Checkstyle
    Plug-in Eclipse Checkstyle
    Il plug-in Eclipse Checkstyle
    integra il codice Java di Checkstyle
    auditor nell'IDE Eclipse. Il
    plug-in fornisce feedback in tempo reale a
    l'utente sulla viola...
    Scarica il plug-in Eclipse Checkstyle
  • Di Più "

Comandi Linux

Ad