Fine Source によると、Archive::Tar::File はモードから上位ビットを取り除きます。スクリプトの最初 (アーカイブ::Tar を参照する前) で次の魔法の呪文を試して、それがそれを覆すかどうかを確認できます。
use Archive::Tar::Constant ();
BEGIN {
local $SIG{__WARN__} = sub{};
*Archive::Tar::Constant::STRIP_MODE = sub(){ sub {shift} };
}
...
use Archive::Tar;
...
簡単な説明: STRIP_MODE は、raw モードを渡すことができるサブルーチンを含む定数であり、保存する必要があるモードを返します。通常は
sub { shift() & 0777 }
これは定数であるため、Archive::Tar::Constant から Archive::Tar::File にインポートされ、そこで使用されます。設定されているものは何でも、コンパイル時に Archive::Tar::File にインライン化されます。したがって、これを変更するには、定数をインライン化する前、つまり Archive::Tar::File をロードする前に変更する必要があります。
注: インライン化可能な定数を変更するとエラーが発生しやすいため (影響が出るには遅すぎて変更すると)、通常は通常の方法では無効にできない重大な警告が生成されます。