명령 줄 인수 -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;
}
코드를 스키밍 한 후,'function2'를 두 번 호출하는 것처럼 보입니다. 거기에'if'를 출력합니다. – squiguy
나는 아직도 이것에 아주 새롭다. 따라서 "if"를 사용하면 실제로 "if"를 실행하고 케이스를 평가하지 않습니다. 그렇다면 그것을 회피하기위한 최선의 행동 방책은 무엇입니까? – user2361820
예, 함수를 호출 할 때마다 평가할 것입니다. 이상하게 보입니다. 그러나 함수에 변수를 할당하고 if 함수에서 변수를 검사하는 것은 어떻습니까? 뭐든간에 당신에게 의미가 있습니다. – squiguy