Un comando con backtick che contiene export cambia solo la shell creata per quel comando. Quando la shell termina, il processo Perl padre conserva ancora il suo ambiente precedente.

Imposta invece l'hash d'ambiente di Perl. local può mantenere la modifica all'interno di un blocco:

{
    local $ENV{http_proxy} = 'http://proxy.example:8080';
    local $ENV{https_proxy} = 'http://proxy.example:8080';

    my $status = system {
        '/usr/bin/curl'
    } '/usr/bin/curl', '--fail', '--max-time', '30',
      'https://downloads.example/data.csv';

    die "Downloader failed: $status" if $status != 0;
}

Il figlio eredita i valori localizzati. Per un download HTTP pubblico, un endpoint della lista di proxy HTTP può fornire quei valori URL. Quando il blocco termina, Perl ripristina le voci precedenti, inclusa la loro assenza precedente. Il risultato system mostrato è lo stato del processo Perl, non un codice di risposta HTTP decodificato.

local ha ambito dinamico: altro codice Perl chiamato dentro quel blocco vede anch'esso l'ambiente temporaneo. Non è un archivio privato di credenziali per funzione.

Rivedi le variabili ereditate in maiuscolo e di bypass per il client scelto. È il downloader a decidere quali input consuma. Un'impostazione proxy inoltre non cambia l'identità utente del processo né richiede una shell root separata solo per essere ereditata.

Articoli correlati