Может ли скрипт на Perl изменить себя? - PullRequest
11 голосов
/ 25 августа 2010

Я бы хотел, чтобы мои скрипты отслеживали внутреннюю дату последней редакции в качестве комментария.Это возможно?Мне кажется, что нужно было бы захватить дату, а затем открыть свой файл сценария для добавления, записать данные и сохранить файл.Основываясь на фрагменте кода, оставленном 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.

Ответы [ 6 ]

7 голосов
/ 25 августа 2010

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

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

6 голосов
/ 25 августа 2010

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

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

3 голосов
/ 25 августа 2010

По запросу добавив мой комментарий в качестве ответа.

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

1 голос
/ 26 августа 2010
#! /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 голос
/ 25 августа 2010

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

Мудро это или нет, я оставлю вам решать.

0 голосов
/ 25 августа 2010

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

- Джон

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...