2012-06-29 3 views
-7
use Text::Diff; 
my $count; 
our $stats2 = 0; 
for($count = 0; $count <= 1000; $count++){ 
    my $data_dir="archive/oswiostat/oracleapps.*dat"; 
    my $data_file= `ls -t $data_dir | head -1`; 
    chomp($data_file); 
    while(defined($data_file)){ 
     print $data_file; 
     open (DAT,$data_file) || die("Could not open file! $!"); 
     my @stats1 = stat $data_file; 
     @raw_data=<DAT>; 
     close(DAT); 
     print "Stats1 is :$stats1[9]\n"; 
     sleep(5); 
     print "Checking $stats1[9] equals $stats2\n"; 
     chomp $stats[9]; 
     chomp $stats2; 
     if($stats1[9] != $stats2){ 
      print "I am here"; 
      my @diff = diff \@raw_data, \@raw_data2, { STYLE => "Context" }; 
      @trim_diff = removedash(@diff); 
      print "@trim_diff"; 
     } 
     @[email protected]_data; 
     $stats2 = $stats1[9]; 
     print "Stat2: $stats2\n"; 
    } 
} 

sub removedash { 
    print "Its in sub"; 
    my $cnt=0; 
    foreach (@_) { 
     chomp; 
     if (/^- /){ 
      s#^- ##g; 
      $ar[$cnt] = "$_\n"; 
      $cnt++; 
     } 
    } 
    return (@ar); 
} 

배열에서 대시를 제거하고 다시 보내려면 하위를 사용하고 있습니다. @trim_diff는 @ar를 반환해야하지만 아무것도 표시하지 않습니다. 내가 어디에서 잘못했는지 모르겠습니다. 너희들이 도와 줄 수 있니?배열 반환이 작동하지 않습니다

+2

"들여 쓰기"라고하는이 작은 것이 있습니다. 당신은 그것을 조사해야합니다. –

+3

'@ ar'을 반환하지만 결코 선언하지 마십시오. 당신은'strict '를 사용해야한다. –

+0

return 문이 작동해야합니다 (괄호는 필요하지 않습니다). 프로그램에서 읽고있는 데이터가 무엇인지 알면 도움이 될 수 있습니다. –

답변

2

나는 그것이 작동하지 않는다고 생각합니다. 아마도 빈 목록을 반환 할 것입니다.

귀하의 기능은

removedash

더 적절

remove_elements_without_dashes_and_remove_dashes_from_those_ones

을 이름을 지정해야합니다.

+0

주 프로그램과 함께한다면, 효과가있다. 그러나 아래의 참조를 얻는 하위 i를 통해. 그러나 배열의 내용은 아닙니다. [그것의 하위 ARRAY (0x1ea7b310) Stat2 : 1340930665] – VeerM

+0

Text :: Diff documentation says : OUTPUT이 제공되지 않으면 문자열의 diff를 반환합니다. 배열에 문자열을 지정하는 이유는 무엇입니까? 어쩌면 다시 시작해야 할 것입니다. –

+0

지금은 함수를 사용할 때 함수가 작동하지 않는다는 것을 알게되었습니다.하지만 함수를 사용할 때는 잘 작동합니다. 각 줄에서 "-"시도하고 있지만 리눅스에서는 작동하지 않지만 윈도우에서는 작동합니다.- - 장치 : rrqm/s wrqm/sr/sw/s rsec/s wsec/s avgrq-sz avgqu-sz는 svctm % util을 기다리고 있습니다. – VeerM

관련 문제