Một lệnh backtick có chứa export chỉ thay đổi shell được tạo cho lệnh đó. Khi shell thoát, tiến trình Perl cha vẫn giữ môi trường trước đó.

Thay vào đó, hãy đặt hash môi trường của Perl. local có thể giữ thay đổi trong một khối:

{
    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;
}

Tiến trình con kế thừa các giá trị đã local hóa. Đối với tải xuống HTTP công khai, một điểm cuối từ danh sách proxy HTTP có thể cung cấp các giá trị URL đó. Khi khối kết thúc, Perl khôi phục các mục trước đó, kể cả việc trước đây chúng không tồn tại. Kết quả system hiển thị là trạng thái tiến trình của Perl, không phải mã phản hồi HTTP đã giải mã.

local có phạm vi động: mã Perl khác được gọi bên trong khối đó cũng thấy môi trường tạm thời. Đây không phải kho thông tin xác thực riêng cho từng hàm.

Xem lại các biến chữ hoa và biến bỏ qua được kế thừa cho máy khách đã chọn. Trình tải xuống quyết định dùng đầu vào nào. Cấu hình proxy cũng không thay đổi danh tính người dùng của tiến trình và không đòi hỏi một shell root riêng chỉ để được kế thừa.

Bài viết liên quan