變更檔案清單中每個檔案的存取和修改時間。清單中的前兩個元素必須是 NUMERIC 存取和修改時間,順序為此。傳回成功變更的檔案數量。每個檔案的 inode 變更時間設定為目前時間。例如,當檔案已經存在且屬於執行程式之使用者時,此程式碼的效果與 Unix touch(1) 指令相同
#!/usr/bin/perl
my $atime = my $mtime = time;
utime $atime, $mtime, @ARGV;
自 Perl 5.8.0 起,如果清單中的前兩個元素為 undef
,則會呼叫 C 函式庫中的 utime(2) 系統呼叫,並傳入 null 第 2 個參數。在大部分系統中,這會將檔案的存取和修改時間設定為目前時間(即等同於上述範例),而且即使您不擁有檔案,只要您有寫入權限,也能運作
for my $file (@ARGV) {
utime(undef, undef, $file)
|| warn "Couldn't touch $file: $!";
}
在 NFS 下,這會使用 NFS 伺服器時間,而非本地端電腦時間。如果發生時間同步問題,NFS 伺服器和本地端電腦的時間會不同。事實上,Unix touch(1) 指令通常會使用此格式,而非第一個範例中顯示的格式。
僅將前兩個元素之一傳遞為 undef
等同於傳遞 0,而且當兩個元素都是 undef
時,不會產生說明中的效果。這也會觸發未初始化警告。
在支援 futimes(2) 的系統上,您可以在檔案之間傳遞檔案句柄。在不支援 futimes(2) 的系統上,傳遞檔案句柄會引發例外。檔案句柄必須傳遞為 glob 或 glob 參考才能被辨識;單字被視為檔案名稱。
可攜性問題:perlport 中的「utime」。