2009-02-24 69 views

回答

4

根據精細來源,Archive :: Tar :: File去除模式中的高位。 您可以嘗試在你的腳本的開頭以下魔法咒語(之前任何 可能引用檔案::焦油),看看是否顛覆它:

use Archive::Tar::Constant(); 
BEGIN { 
    local $SIG{__WARN__} = sub{}; 
    *Archive::Tar::Constant::STRIP_MODE = sub(){ sub {shift} }; 
} 
... 
use Archive::Tar; 
... 

簡要說明:STRIP_MODE是包含一個常數子程序可以通過原始模式並返回應該存儲的模式。它通常被設定爲

sub { shift() & 0777 } 

因爲它是一個常數,從檔案::焦油::進口恆進檔案::焦油::文件和使用存在,無論它被設置爲會內聯到存檔: :Tar :: File,因爲它被編譯。所以要改變它,常量必須在被內聯之前被改變,也就是說,在Archive :: Tar :: File被加載之前。

N.B.因爲改變可變常數容易出錯(在發生影響後爲時已晚),通常會產生嚴重的警告,通常無法禁用。

0

不知道,但在官方的tar命令,你需要通過-p要做到這一點

-1

你可能想看看Archive::Tar documentation的細節。從短暫的一瞥,似乎

$Archive::Tar::CHMOD = 1; 

應該做你想要什麼,儘管文件稱,上面的設置是默認的。 Archive :: Tar可能會剝離高位模式位,如粘性位。

存檔是否都是使用Archive :: Tar創建和提取的,或者您是在一端還是另一端使用標準tar程序?