ProgrammazioneSviluppatore Backend

Quali sono i modi per organizzare e importare moduli in Perl? Come funziona il sistema @INC e use/require? Fai un esempio di creazione e collegamento di un modulo personalizzato.

Supera i colloqui con l'assistente IA Hintsage

Risposta

Per organizzare il codice in Perl si utilizzano moduli (packages), che sono definiti in file separati con estensione .pm.

  • Per collegare un modulo si usa use (in fase di compilazione) e require (in fase di esecuzione).
  • Quando cerca un modulo, Perl utilizza un array speciale @INC — questo è un elenco di directory dove Perl cerca moduli.

Esempio di modulo:

Foo.pm

package Foo; use strict; use warnings; sub say_hello { print "Hello from Foo! "; } 1;

Collegamento e utilizzo:

use lib '.'; # Aggiunge la cartella attuale a @INC use Foo; Foo::say_hello(); # Stampa: Hello from Foo!

Principali differenze:

  • use importa il modulo all'inizio dell'esecuzione dello script e chiama automaticamente il metodo import, se presente.
  • require carica il modulo solo al primo richiamo.

Domanda trabocchetto

Qual è la differenza tra use e require? Quando applicare quale operatore?

Risposta:

  • use — agisce in fase di compilazione, chiama automaticamente import (di solito usato per i moduli).
  • require — agisce durante l'esecuzione, necessario quando il nome del modulo è sconosciuto fino all'esecuzione o non deve essere sempre collegato.

Esempi di errori reali a causa della mancanza di conoscenze sui dettagli dell'argomento


Storia

In un grande progetto, hanno collegato la propria libreria tramite require, dimenticando che utilizza funzioni esportate. La funzione utilizzata non era stata esportata, perché require non chiama import. Risultato — non funziona l'importazione dei simboli, deve invocare le funzioni esplicitamente.


Storia

Durante il trasferimento del modulo in una cartella separata hanno dimenticato di aggiungere il percorso alla cartella tramite use lib o di modificare la variabile @INC. Il modulo non veniva trovato, lo script terminava con un errore, anche se il file si trovava nel posto giusto rispetto al progetto.


Storia

In una vecchia applicazione hanno chiamato il modulo con la lettera minuscola, ma l'hanno collegato tramite use con la maiuscola: use foo; invece di use Foo;. Perl non ha trovato il modulo, causando malfunzionamenti nelle parti critiche dell'applicazione.