Исключения обрабатываются более эффективно в Python, чем в Java, что по крайней мере частично , почему вы видите эту конструкцию в Python. В Java более неэффективно (с точки зрения производительности) использовать исключения таким образом.
Можно использовать встроенный модуль File::stat
(включенный с Perl 5.004).
Вызов stat($fh)
возвраты массив со следующей информацией о дескрипторе файла передал в (от perlfunc страница справочника для stat
):
0 dev device number of filesystem
1 ino inode number
2 mode file mode (type and permissions)
3 nlink number of (hard) links to the file
4 uid numeric user ID of file's owner
5 gid numeric group ID of file's owner
6 rdev the device identifier (special files only)
7 size total size of file, in bytes
8 atime last access time since the epoch
9 mtime last modify time since the epoch
10 ctime inode change time (NOT creation time!) since the epoch
11 blksize preferred block size for file system I/O
12 blocks actual number of blocks allocated
Элемент номер 9 в этом массиве даст Вам прошлый измененный раз с эпохи ( 0:00 1 января 1970 GMT). От этого можно определить местное время:
my $epoch_timestamp = (stat($fh))[9];
my $timestamp = localtime($epoch_timestamp);
Для предотвращения магическое число 9 необходимых в предыдущем примере дополнительно используйте Time::localtime
, другой встроенный модуль (также включенный с Perl 5.004). Это требует некоторого (возможно) более четкого кода:
use File::stat;
use Time::localtime;
my $timestamp = ctime(stat($fh)->mtime);
Используйте встроенное статистика функция. Или более конкретно:
my $modtime = (stat($fh))[9]
my @array = stat($filehandle);
время изменения хранится в формате Unix в $array [9].
Или явно:
my ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size,
$atime, $mtime, $ctime, $blksize, $blocks) = stat($filepath);
0 dev Device number of filesystem
1 ino inode number
2 mode File mode (type and permissions)
3 nlink Number of (hard) links to the file
4 uid Numeric user ID of file's owner
5 gid Numeric group ID of file's owner
6 rdev The device identifier (special files only)
7 size Total size of file, in bytes
8 atime Last access time in seconds since the epoch
9 mtime Last modify time in seconds since the epoch
10 ctime inode change time in seconds since the epoch
11 blksize Preferred block size for file system I/O
12 blocks Actual number of blocks allocated
эпоха была в 0:00 1 января 1970 GMT
[еще 117], информация находится в статистика .
Вам нужны вызов статистики и имя файла:
my $last_mod_time = (stat ($file))[9];
Perl также имеет другую версию:
my $last_mod_time = -M $file;
, но то значение относительно когда запущенная программа. Это полезно для вещей как сортировка, но Вы, вероятно, хотите первую версию.
Если Вы просто сравниваете два файла для наблюдения, который является более новым затем -C
, должен работать:
if (-C "file1.txt" > -C "file2.txt") {
{
/* Update */
}
существует также -M
, но я не думаю, что это - то, что Вы хотите. К счастью почти невозможно искать документацию относительно этих операторов файла через Google.
Вы могли использовать статистику () или модуль File::Stat.
perldoc -f stat
Я думаю, что Вы ищете stat
функция (perldoc -f stat
)
, В частности, 9-е поле (10-й, индекс № 9) возвращенного списка является последним, изменяют время файла в секундах с эпохи.
Так:
my $last_modified = (stat($fh))[9];