Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何确定退出vim时文件是否被修改?_Perl_Vim - Fatal编程技术网

Perl 如何确定退出vim时文件是否被修改?

Perl 如何确定退出vim时文件是否被修改?,perl,vim,Perl,Vim,我通过以下方式从perl程序调用vim编辑器: my $cmd = "vi myfile"; system($cmd); 然后我想根据文件是否被修改执行不同的操作: if(myfile was modified) { doAction1; } else { doAction2; } 如何检查文件是否被修改?我搜索了vim退出代码,但没有找到任何有用的代码 制作一个引入tmp文件的脚本: MYTMP=/tmp/perltimestamp.$$ file=myfile touch

我通过以下方式从perl程序调用vim编辑器:

my $cmd = "vi myfile";
system($cmd);
然后我想根据文件是否被修改执行不同的操作:

if(myfile was modified) {
    doAction1;
}
else {
    doAction2;
}

如何检查文件是否被修改?我搜索了vim退出代码,但没有找到任何有用的代码

制作一个引入tmp文件的脚本:

MYTMP=/tmp/perltimestamp.$$
file=myfile
touch ${MYTMP}
vi ${file}
if [ $(find . -name ${file} -newer ${MYTMP} | wc -l ) -gt 0 ]; then
   rm ${MYTMP}
   doAction1
} else {
   rm ${MYTMP}
   doAction2;
}

当然,当您的操作快速且安全时,您可以将rm命令移到if-then-else之外。

简单的方法是检查文件的
mtime

封装MD5和mtime检查(如果安装了
File::MD5
,则首选MD5):

下面是一个完整的示例:

#!/usr/bin/perl

use File::Modified;

my $filename = 'myfile';
my $detector = File::Modified->new(files=>[$filename]);

my $cmd = "vi $filename";
system $cmd;

if($detector->changed) {
    print "modified\n";
} else {
    print "the same\n";
}

HysStWald:如果有任何答案解决了你的问题,请通过点击复选标记来考虑。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。没有义务这样做。
use File::Modified;
my $detector = File::Modified->new(files=>[$filename]);
# [run the editor]
if($detector->changed) { # [...]
#!/usr/bin/perl

use File::Modified;

my $filename = 'myfile';
my $detector = File::Modified->new(files=>[$filename]);

my $cmd = "vi $filename";
system $cmd;

if($detector->changed) {
    print "modified\n";
} else {
    print "the same\n";
}