Ένα παιδικό κέλυφος δεν μπορεί να εξαγάγει διακομιστή μεσολάβησης πίσω στο Perl
Ορίστε απευθείας το ENV του Perl και περιορίστε τις μεταβλητές μεσολάβησης με local γύρω από μία κλήση παιδιού, ώστε οι αρχικές τιμές να επιστρέψουν μετά.
Μια εντολή backtick που περιέχει export αλλάζει μόνο το κέλυφος που δημιουργήθηκε για αυτήν την εντολή. Όταν το κέλυφος τερματιστεί, η γονική διεργασία Perl εξακολουθεί να έχει το προηγούμενο περιβάλλον της.
Ορίστε αντί αυτού το hash περιβάλλοντος του Perl. Το local μπορεί να κρατήσει την αλλαγή μέσα σε ένα μπλοκ:
{
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;
}
Το παιδί κληρονομεί τις τοπικές τιμές. Για μια δημόσια λήψη HTTP, ένα τελικό σημείο από τη λίστα διακομιστών μεσολάβησης HTTP μπορεί να δώσει αυτές τις τιμές URL. Όταν το μπλοκ τελειώσει, το Perl επαναφέρει τις προηγούμενες καταχωρίσεις, μαζί με την προηγούμενη απουσία τους. Το αποτέλεσμα του system που εμφανίζεται είναι η κατάσταση της διεργασίας Perl, όχι ένας αποκωδικοποιημένος κωδικός απόκρισης HTTP.
Το local έχει δυναμικό εύρος: άλλος κώδικας Perl που καλείται μέσα σε αυτό το μπλοκ βλέπει επίσης το προσωρινό περιβάλλον. Δεν είναι ιδιωτική αποθήκη διαπιστευτηρίων ανά συνάρτηση.
Ελέγξτε τις κληρονομούμενες μεταβλητές κεφαλαίων και παράκαμψης για τον επιλεγμένο πελάτη. Ο λήπτης αποφασίζει ποιες εισόδους καταναλώνει. Μια ρύθμιση μεσολάβησης επίσης δεν αλλάζει την ταυτότητα χρήστη της διεργασίας ούτε απαιτεί ξεχωριστό κέλυφος root μόνο και μόνο για να κληρονομηθεί.