-1

私は、既存のファイルの経過時間を表示し、約 4 時間後に自動的に削除するスクリプトに取り組んでいます (メンテナンス ウィンドウと推定されます)。statPerlの関数を使用して出力をテストしようとしています。複数のボックスがあり、一部は Linux と Solaris を実行しているため、これが最も移植性の高い方法です。私はエポック時間を取得しようとしています。

use File::stat;
$file  = "samplefile"; 
$mtime = (stat($file))[9];
if (!defined $file){
    print "No file specified\n";
    exit 1; 
}
printf("%d", @mtime);

stat()を返すことがわかっている@_ので、データ型をこれに変更しようとしました。しかし、それは初期化されていないと言って戻ってmtimeきます。なぜそう言うのですか?

4

2 に答える 2

6

の内容を印刷し@mtimeますが、結果を に配置しました$mtime。常に使用しますuse strict; use warnings;。それはあなたの問題を発見したでしょう。

コードは次のいずれかのようになります。

  • File::stat なし (statリストを返す):

    use strict;
    use warnings;
    my $file  = "samplefile"; 
    my $mtime = (stat($file))[9];
    die "Can't stat file: $!\n" if !defined($mtime);
    printf("%d\n", $mtime);
    

    (EXPR)[9]リストの 10 番目の要素をEXPR返すか、リストがそれほど長くない場合は undef を返します。$mtimeこれはではなくに割り当てたスカラーです@mtime

  • File::stat (statオブジェクトを返します):

    use strict;
    use warnings;
    use File::stat;
    my $file  = "samplefile"; 
    my $stat = stat($file);
    die "Can't stat file: $!\n" if !$stat;
    printf("%d\n", $stat->mtime);
    
于 2013-06-14T22:51:14.493 に答える