Perl脚本可以修改自己吗?

时间:2010-08-25 03:03:15

标签: 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.

6 个答案:

答案 0 :(得分:7)

您可以让您的版本控制系统自动执行此操作。

但是如果你正在使用版本控制,那么这个步骤实际上并不是真正的nesaccery。

答案 1 :(得分:6)

这是可能的,但这并不是一个好主意。首先,它在你运行它之前不会更新日期。

如果您使用的是良好的编辑器,则可能有一种方法可以在保存文件时自动插入时间戳。例如,我设置Emacs使用write-contents-hooks在HTML文件中执行此操作。 (使用Perl代码需要进行一些修改,但cjm-misc.el中的cjm-html-timestamp会为您提供一个起点。)

答案 2 :(得分:3)

按要求添加我的评论作为答案。

听起来你已经知道该怎么做了。如果它是unix / linux盒子上的perl脚本,那么权限应该不是问题,如果它在Windows框中,它可能不会让你在文件正在使用中。

答案 3 :(得分:1)

以下是在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);

这是否明智我会留给你决定。

答案 4 :(得分:1)

#! /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

答案 5 :(得分:-1)

  

听起来你已经知道该怎么做了。如果它是unix / linux盒子上的perl脚本,那么权限应该不是问题,如果它在Windows框中,它可能不会让你在文件正在使用中

- 约翰