Может ли 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, это может не позволить вам использовать файл

- Джон