2011-08-29 4 views
0

나는 기본적으로 네트워킹 녀석과 너무 잘 쓰는 스크립트입니다.perl hecking once once 모든 가치는

몇 가지 스크립트를 작성하면서 필자는 아래 요구 사항을 발견했습니다.

는 I 3 ","1 "의 일부 값을 갖는 해시 배열하거나"2 "내 요건 이외의 값이 모두 동일한 경우

"1 "("2 "가 될 수 또는 ") 그런 다음 한 번 명령문을 인쇄 한 다음 해당 루프에서 빠져 나올 것입니다.

"1"과 같은 값이 있으면 명령문이 인쇄됩니다.

예 : 모든 값이 비 때문에 언급 hash_array 예상 아니라 코드가 작동 위

No Evolution 

를 인쇄

my %hash_array1=(A=>2,B=>2,C=>2); 
my @array2=values (%hash_array1); 

foreach my $line (@array2) { 

    if ($line!=1) { 

     print BOLD GREEN "\rNo Evolution ",RESET; 

     last; 
    } 
    else { 
     print BOLD RED "Evolution \n",RESET; 
    } 
} 

"1",하지만 해시 아래 잘 작동하지

my %hash_array1=(A=>1,B=>2,C=>2); 

Evolution 

No Evolution 

이것은 내 예상대로 아닙니다. 한 번에 인쇄 할 때 "진화"와 "진화하지 않음"을 더 이상 인쇄해서는 안됩니다. (그러나 루프를 계속 반복해야합니다.)

더 많은 명확성이 필요하면 알려주십시오.

내가 제대로 귀하의 요구 사항을 읽고 있어요 경우, 당신은 당신이 공격하지 않는 한 전체 세트를 검토 할 필요 해요

+0

나는 네트워킹 담당자이기 때문에 스크립트 작성에 능숙해야합니다.) –

답변

0

나는 같은 것을 사용하는 것이 :

#!/usr/bin/perl 
my %hash_array1=(A=>1,B=>1,C=>2); 
my $values = join('', values(%hash_array1)); 

if ($values =~ /1/) { 
    print "at least one 1"; 
} else { 
    print "no 1"; 
} 
+0

이것은 'join'이 모든 값을 가져 와서 문자열을 만들어야한다는 것을 감안할 때 실행 시간이 제 생각과 비슷할 것이라고 생각합니다. 즉, 부정적인 일치 만하면됩니다. 실패하면 모두 "1"이 아닙니다. 당신이 가지고있는 방식은 3 개의 값을 포함하는 해시에서만 작동하며, 그의 요구 사항의 반대입니다. 그는 세트에 "1"이 없으면 (또는 반대로, 하나가 있다면 - 당신은 하나 또는 다른 것을 확인해야합니다) –

+0

감사합니다. 질문을 잘못 읽었습니다. –

+0

고마워요. 이것은 적은 수의 코드 행렬로 훌륭한 논리입니다.안부 : Mahesh – Mahesh

2

감사

마헤시에 "1"

은 기본적으로 다음을 수행해야 당신이 "1"히트 경우에만 상태를 유지하고 루프를 종료

my %hash_array1=(A=>2,B=>2,C=>2); 
my @array2=values (%hash_array1); 
my $state = 0; 

foreach my $line (@array2) 
{ 
    if ($line == 1) 
    { 
     $state = 1; 
     last; 
    } 
} 

if ($state == 1) 
{ 
    print BOLD RED "Evolution \n",RESET; 
} 
else 
{ 
    print BOLD GREEN "\rNo Evolution ",RESET; 
} 
+0

브라이언에게 감사드립니다. 내 스크립트에서 이것을 시도하고 결과에 대해 알려줄 것입니다. : Mahesh – Mahesh

4
my %hash_array1=(A=>2,B=>2,C=>2); 
if (grep $_ == 1, values %hash_array1) { 
    print BOLD RED "Evolution \n",RESET; 
} 
else { 
    print BOLD GREEN "\rNo Evolution ",RESET; 
} 

(일부 의견은 실행 시간을 말합니다. 성능 문제가 있음이 증명되지 않는 한 걱정할 필요가 없습니다.)

+0

성능 논쟁의 여지가있는 귀중한 논리에 감사드립니다. 안부 - Mahesh – Mahesh

관련 문제