Может ли скрипт на Perl изменить себя?

Я хотел бы, чтобы мои сценарии отслеживали их последнюю дату пересмотра внутри как комментарий. Это возможно? Мне кажется, что нужно было бы захватить дату, а затем открыть свой файл сценария для добавления, записать данные и сохранить файл.

Спасибо Everone, отличные ответы всех без исключения. Основываясь на фрагменте кода, оставленном 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.
11
задан Jeremy Whalen 25 August 2010 в 04:21
поделиться

6 ответов

Это возможно, но это плохая идея. Во-первых, он не будет обновлять дату, пока вы не запустите его.

Если вы используете хороший редактор, он может иметь способ автоматически вставлять метку времени при сохранении файла. Например, я настроил Emacs для этого в файлах HTML с помощью write-contents-hooks . (Для работы с кодом Perl потребуются некоторые изменения, но cjm-html-timestamp в cjm-misc.el даст вам отправную точку.)

6
ответ дан 3 December 2019 в 07:10
поделиться

Вы можете настроить систему контроля версий на автоматическую настройку.

Но если вы используете систему управления версиями, то этот шаг в первую очередь не является небезопасным.

7
ответ дан 3 December 2019 в 07:10
поделиться

Следующее работало в системе 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);

Разумно это или нет, решать вам.

1
ответ дан 3 December 2019 в 07:10
поделиться

Похоже, вы уже знаете, как это сделать. Если это perl-скрипт для Unix/Linux, то разрешения не должны быть проблемой, если это для Windows, он может не позволить вам, так как файл используется

-- John

-1
ответ дан 3 December 2019 в 07:10
поделиться
#! /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
1
ответ дан 3 December 2019 в 07:10
поделиться

По просьбе добавлю мой комментарий в качестве ответа.

Похоже, вы уже знаете, как это сделать. Если это perl-скрипт для Unix/Linux, то разрешения не должны быть проблемой, если это для Windows, он может не позволить вам, так как файл используется.

3
ответ дан 3 December 2019 в 07:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: