Ava*_*ava 1 sorting perl readdir
我想我需要某种Schwartzian变换来实现这个功能,但是我很难搞清楚它,因为perl不是我最强的语言.
我有一个包含内容的目录:
album1.htm
album2.htm
album3.htm
....
album99.htm
album100.htm
Run Code Online (Sandbox Code Playgroud)
我正试图从这个目录中获得具有最高编号的专辑(在本例中为album100.htm).请注意,文件上的时间戳不是确定事物的可靠方法,因为人们在事后添加了旧的"丢失"专辑.
以前的开发人员只是使用下面的代码片段,但是一旦目录中有超过9个专辑,这显然就会崩溃.
opendir(DIR, PATH) || print $!;
@files = readdir(DIR);
foreach $file ( sort(@files) ) {
if ( $file =~ /album/ ) {
$last_file = $file;
}
}
Run Code Online (Sandbox Code Playgroud)
如果您只需要找到编号最高的专辑,则不需要对列表进行排序,只需运行它并跟踪最大值即可.
#!/usr/bin/perl
use strict;
use warnings;
my $max = 0;
while ( <DATA> ) {
my ($album) = $_ =~ m/album(\d+)/;
$max = $album if $album > $max;
}
print "album$max.htm";
__DATA__
album1.htm
album100.htm
album2.htm
album3.htm
album99.htm
Run Code Online (Sandbox Code Playgroud)