Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.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
Macos 在我的MAC上用perl修改时间不起作用_Macos_Perl_Stat_Ctime - Fatal编程技术网

Macos 在我的MAC上用perl修改时间不起作用

Macos 在我的MAC上用perl修改时间不起作用,macos,perl,stat,ctime,Macos,Perl,Stat,Ctime,我使用以下代码来获取文件的修改时间。但它不起作用。无论我使用stat命令还是-M运算符,我都会收到错误消息,如“使用未初始化的值…”或“无法对未定义的值调用方法”mtime“,这取决于我使用的方法。有什么建议吗?我使用的是MAC OS v10.8.5。我发誓-M选项昨天起了几次作用,但从那时起它就停止了作用。我很困惑 <code> #!/usr/bin/perl use POSIX qw(strftime); use Time::Local; use Time::localtime;

我使用以下代码来获取文件的修改时间。但它不起作用。无论我使用stat命令还是-M运算符,我都会收到错误消息,如“使用未初始化的值…”或“无法对未定义的值调用方法”mtime“,这取决于我使用的方法。有什么建议吗?我使用的是MAC OS v10.8.5。我发誓-M选项昨天起了几次作用,但从那时起它就停止了作用。我很困惑

<code>
#!/usr/bin/perl
use POSIX qw(strftime);
use Time::Local;
use Time::localtime;
use File::stat;
use warnings;

$CosMovFolder = '/Logs/Movies';
#sorting files based on modification date
opendir (DIR, $CosMovFolder);
@moviedir=readdir(DIR);
#$file1modtime = -M $moviedir[1]; #it works here but doesn't work if used after the 
sort line below. Why?

closedir(DIR);  
#sorting files by modification dates
@moviedir = sort { -M "$CosMovFolder/$a" <=> -M "$CosMovFolder/$b" } (@moviedir); 
#$file1modtime = -M $moviedir[1]; #tried this, not working.  same uninitialized value error message

$latestfile = $moviedir[1];
print "file is: $latestfile\n";
open (FH,$latestfile);

#$diff_mins = (stat($latestfile))[9];  #didn't work, same uninitialized value error message
my $diff_mins = (stat(FH)->mtime); # Can't call method "mtime" on an undefined value error message
print $diff_mins,"\n";
close FH
</code>

#!/usr/bin/perl
使用POSIXQW(strftime);
使用时间::本地;
使用时间::localtime;
使用File::stat;
使用警告;
$CosMovFolder='/Logs/Movies';
#根据修改日期对文件进行排序
opendir(DIR,$CosMovFolder);
@moviedir=readdir(DIR);
#$file1modtime=-M$moviedir[1]#它可以在这里使用,但如果在
下面的排序行。为什么?
closedir(DIR);
#按修改日期对文件排序
@moviedir=sort{-M“$CosMovFolder/$a”-M“$CosMovFolder/$b”}(@moviedir);
#$file1modtime=-M$moviedir[1]#试过了,没用。相同的未初始化值错误消息
$latestfile=$moviedir[1];
打印“文件是:$latestfile\n”;
打开(FH,$latestfile);
#$diff_mins=(stat($latestfile))[9]#无法工作,相同的未初始化值错误消息
我的$diff_分钟=(统计(FH)->mtime);#无法对未定义的值错误消息调用方法“mtime”
打印$diff_mins,“\n”;
闭合跳频
在脚本开始时启用。你会发现你打电话的方式有问题。除非你出于其他原因需要删除该文件,否则不要。跳过整个FH的东西

但是,更大的问题是,您试图
stat
一个文件,但没有给出该文件的完整路径。到文件夹(或将完整路径传递到
stat

这对我很有用:

#!/usr/bin/perl
use strict;
use warnings;
use File::stat;

my $CosMovFolder = '/Logs/Movies';
chdir($CosMovFolder) or die $!;
#sorting files based on modification date
opendir (DIR, $CosMovFolder);
#Grab all items that don't start with a period.
my @moviedir = grep(/^[^\.]/, readdir(DIR));
#$file1modtime = -M $dir[1]; # tried this, not working.  same uninitialized value error message
closedir(DIR);  
@moviedir = sort { -M "$CosMovFolder/$a" <=> -M "$CosMovFolder/$b" } (@moviedir); #sorting files by modification dates
my $latestfile = $moviedir[0];
print "file is: $latestfile\n";
print localtime(stat($latestfile)->mtime) . "\n";
#/usr/bin/perl
严格使用;
使用警告;
使用File::stat;
my$CosMovFolder='/Logs/Movies';
chdir($CosMovFolder)或die$!;
#根据修改日期对文件进行排序
opendir(DIR,$CosMovFolder);
#抓取所有不以句号开头的项目。
我的@moviedir=grep(/^[^\.]/,readdir(DIR));
#$file1modtime=-M$dir[1];#试过了,没用。相同的未初始化值错误消息
closedir(DIR);
@moviedir=sort{-M“$CosMovFolder/$a”-M“$CosMovFolder/$b”}(@moviedir)#按修改日期对文件排序
my$latestfile=$moviedir[0];
打印“文件是:$latestfile\n”;
打印本地时间(stat($latestfile)->mtime)。“\n”;

希望有帮助

谢谢你,吉姆。我没有注意到我没有传递文件的完整路径。谢谢你捕捉到错误。没问题。也做了一百次。如果你对答案满意,别忘了“接受”它。