2013-06-14 1 views
-1

기존 파일의 수명을 표시 한 다음 약 4 시간 (예상 유지 관리 기간) 후에 자동으로 삭제하는 스크립트를 작성하고 있습니다. 나는 Perl에서 stat 함수를 사용하여 출력을 테스트 해왔다. 우리에게는 여러 개의 상자가 있고 일부는 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가 초기화되지 않았다는 것을 계속해서 알려줍니다. 왜 그렇게 말하는거야?

+3

엄격한 사용'사용; 경고를 사용하라. – ikegami

+0

'stat'은리스트 *를 반환합니다. 배열을 반환하는 것은 불가능합니다 (예 :'_ _ '). – ikegami

답변

6

@mtime의 내용을 인쇄하지만 결과는 $mtime입니다. 항상 use strict; use warnings;을 사용하십시오. 그것은 당신의 문제를 발견했을 것입니다. (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으로 지정한 스칼라입니다.

    파일 : 통계와
  • (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); 
    
+0

OMG! 그것은 효과가 있었다. 그래서 그것을 선언하고 mtime을 참조하는 것이 트릭을 만들었습니다! 정말 고마워. 정말 도움이되었습니다. –

+0

문제 없습니다. 이 질문에 대한 답변이 있으면 옆에있는 표시를 확인하십시오. 스택 오버플로에 오신 것을 환영합니다! – ikegami

4

당신은 배열 @mtime에 액세스하는,하지만 당신은 스칼라 $mtime에 값을 할당합니다. 그것들은 같은 변수가 아닙니다. 당신은 항상 당신에게 많이 발생합니다 그렇게하지

use strict; 
use warnings; 

를 사용해야합니다

Global symbol "@mtime" requires explicit package name at ... 

: 당신이

use strict; 

당신은 바로이 문제를 알고있을 것이다 사용했다면

추가 작업과 "신비한"버그가 있습니다.

관련 문제