Может ли Perl script изменить себя?
Я бы хотел, чтобы мои скрипты отслеживали последнюю дату пересмотра внутри себя как комментарий. Это возможно? Мне кажется, что ему нужно будет захватить дату, а затем открыть файл script для добавления, записать данные и сохранить файл.
Спасибо, Эверон, отличные помощники. Основываясь на фрагменте кода, оставленном GreenMatt, я выбросил это вместе...
#!/usr/bin/perl -w
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime time;
$year += 1900;
$mon +=1;
open SELF, ">> letterhome.pl" or die "Unable to open self";
#print SELF "# ran/modified at " . join(' ', localtime(time)) . "\n";
print SELF "# ran/modified at $hour:$min:$sec on $mon/$mday/$year.\n";
close(SELF);
# ran/modified at 31 48 23 24 7 110 2 235 1
# unformated result of using localtime(time)
#Results using formated time/date
# ran/modified at 0:1:43 on 8/25/2010.
# ran/modified at 0:2:40 on 8/25/2010.
# ran/modified at 0:4:35 on 8/25/2010.
Ответы
Ответ 1
Возможно, но это не делает его хорошей идеей. Во-первых, он не обновлял дату, пока вы ее не запустили.
Если вы используете хороший редактор, у него может быть возможность автоматически вставить временную метку при сохранении файла. Например, я создал Emacs, чтобы сделать это в файлах HTML, используя write-contents-hooks
. (Для работы с Perl-кодом потребуется некоторое изменение, но cjm-html-timestamp
в cjm-misc.el даст вам отправную точку.)
Ответ 2
Вы можете заставить свою систему контроля версий сделать это автоматически.
Но если вы используете управление версиями, то этот шаг на самом деле не является приоритетом.
Ответ 3
По просьбе добавления моего комментария в качестве ответа.
Похоже, вы уже знаете, как это сделать. Если это perl script в unix/linux box, то разрешения не должны быть проблемой, если он находится в окне Windows, он может не позволить вам использовать этот файл.
Ответ 4
Следующее работало над системой FreeBSD. Он добавляется к концу, что кажется вам приемлемым, но не соответствует "нормальному" способу документирования изменений внутри файла - по крайней мере для меня, поскольку я почти всегда видел это в начале. Вероятно, вы захотите изменить способ отображения даты/времени.
#!/usr/bin/perl -w
open SELF, ">> selfModify.pl" or die "Unable to open self";
print SELF "# ran/modified at " . join(' ', localtime()) . "\n";
close(SELF);
Разве это мудро или нет, я оставлю для вас решение.
Ответ 5
#! /usr/bin/env perl
use warnings;
use strict;
use autodie;
{
open my $self, '>>', $0;
my $time = localtime;
print {$self} "# ran on $time\n";
}
__END__
# ran on Wed Aug 25 16:41:05 2010
Ответ 6
Похоже, вы уже знаете, как это сделать. Если это perl script в unix/linux box, то разрешения не должны быть проблемой, если он находится в окне Windows, это может не позволить вам использовать файл
- Джон