2013-05-10 3 views
0

명령 줄 인수 -s을 사용하는 스크립트를 작성했으며 그 뒤에 검색어를 추가 할 수 있습니다.출력물이 두 번 출력되는 이유는 무엇입니까?

그런 다음 첫 번째 함수에 입력하고 SQL 데이터베이스에 연결하고 용어를 검색 한 다음 결과를 배열로 반환합니다.

그런 다음 두 번째 함수를 호출하고 배열을 인쇄 한 다음 결과가 있는지 여부에 따라 -1 또는 0을 출력합니다.

마지막으로 결과가 0과 같지 않은지 확인한 다음 결과가 없다면 인쇄합니다.

모든 것이 효과적이지만 결과는 두 번 인쇄됩니다. 왜 그런가? "\n", "@array", "\n" 원인 두 번 &function2(@array);를 호출하고

#!/usr/bin/perl -w 
use warnings; 
use DBI; 
use Getopt::Std; 
use strict; 

getopt('s:'); 
our ($opt_s); 
my $search = $opt_s; 

my @array = function1($search); 
&function1($search); 

&function2(@array); 
if (&function2(@array) != 0) { 
    print "No results found for '$search'", "\n"; 
} 

sub function1 { 
    my $search = $_[0]; 

    our $dbh = DBI->connect("dbi:mysql:dbname=database", "root", "password") 
     or die $DBI::errstr; 

    my $sql = $dbh->selectall_arrayref(
     "SELECT Player from Players_Sport where Sport like '$search'") 
     or die $DBI::errstr; 

    my @array = map { $_->[0] } @$sql; 

    $dbh->disconnect 
     or warn "Disconnection failed: $DBI::errstr\n"; 

    return @array; 
} 

sub function2 { 
    my @array = @_; 
    my $arrayvalue; 

    print("\n", "@array", "\n"); 

    if (scalar(@array) == 0) { 
     $arrayvalue = -1; 
    } 
    else { 
     $arrayvalue = 0; 
    } 

    return $arrayvalue; 
} 
+3

코드를 스키밍 한 후,'function2'를 두 번 호출하는 것처럼 보입니다. 거기에'if'를 출력합니다. – squiguy

+0

나는 아직도 이것에 아주 새롭다. 따라서 "if"를 사용하면 실제로 "if"를 실행하고 케이스를 평가하지 않습니다. 그렇다면 그것을 회피하기위한 최선의 행동 방책은 무엇입니까? – user2361820

+0

예, 함수를 호출 할 때마다 평가할 것입니다. 이상하게 보입니다. 그러나 함수에 변수를 할당하고 if 함수에서 변수를 검사하는 것은 어떻습니까? 뭐든간에 당신에게 의미가 있습니다. – squiguy

답변

1

는 두 번 인쇄 할 수 있습니다. 함수를 한 번 호출하고 반환 값을 변수에 저장 한 다음 함수를 다시 호출하는 대신 변수를 테스트하십시오.이 특정 인스턴스에서는 첫 번째 호출을 완전히 생략 할 수 있습니다.

+0

완벽한, 감사합니다. – user2361820

관련 문제