子シェルから Perl へプロキシをエクスポートし直すことはできない
Perl の ENV を直接設定し、子プロセス呼び出しの前後を local で囲んでプロキシ変数を限定すれば、元の値が後で戻ります。
export を含むバッククォートコマンドが変更するのは、そのコマンド用に作られたシェルだけです。シェルが終了すると、親の Perl プロセスには以前の環境がそのまま残ります。
代わりに Perl の環境ハッシュを設定します。local を使えば変更を 1 つのブロック内に収められます。
{
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 コードも一時的な環境を見ることができます。関数ごとの秘密の認証情報置き場ではありません。
選択したクライアントについて、継承される大文字の変数とバイパス変数を確認してください。どの入力を消費するかはダウンローダーが決めます。プロキシ設定もプロセスのユーザー ID を変えるものではなく、継承させるためだけに別の root シェルを必要とするものでもありません。