-M
ファイルテスト演算子を使用して、各ファイルの年齢に応じてディレクトリを並べ替えます。最後に変更されたファイルがリストの最初に表示されます
このプログラムは原則を示しています。現在の作業ディレクトリ内の最新のファイルを見つけてその名前を出力し、それを開きます。
cwd以外のディレクトリでこれを実行したい場合は、おそらくchdir
にするのが最も簡単でしょう。あなたはかなりのディレクトリで作業している場合は、こののように時間がかかる場合があり-M
use strict;
use warnings 'all';
use feature 'say';
my $newest_file = do {
opendir my $dh, '.' or die $!;
my @by_age = sort { -M $a <=> -M $b } grep -f, readdir $dh;
$by_age[0];
};
say $newest_file;
open my $fh, '<', $newest_file or die qq{Unable to open "$newest_file" for input: $!};
を使用する前に、各ファイルへの完全なパスを構築する必要があります、その後として、opendir
特定のディレクトリにしようとするよりも、 stat
操作が非常に遅いです。あなたは維持、あなたが本当に、そしてちょうどファイルの単一パスを高速に行う何かをしたい場合はstat
は、各ファイル
my $newest_file = do {
opendir my $dh, '.' or die $!;
my @by_age = map $_->[0],
sort { $a->[1] <=> $b->[1] }
map [ $_, -M ], readdir $dh;
$by_age[0];
};
のために一度だけ呼び出されることシュワルツはそう変換を用いたことで、この多くを向上させることができます今まで発見された最新のトラック。このように
my $newest_file = do {
opendir my $dh, '.' or die $!;
my ($best_file, $best_age);
while (readdir $dh) {
next unless -f;
my $age = -M _;
unless (defined $best_age and $best_age < $age) {
$best_age = $age;
$best_file = $_;
}
}
$best_file;
};
このスクリプトで私は最後のSMSを参照してください、その後、私はこのSMSの内容は受信しませんでした。ありがとう – perlfg
@perlfg:ファイルを開いて印刷する方法を伝える必要がありますか? – Borodin
いいえ:)私は常にsmsを受け取り、最後のsmsの内容をperlでエコーします – perlfg