我编写了一个带有命令行参数-s
的脚本,并允许我在其后添加搜索词。
然后将其提供给我的第一个函数,连接到SQL数据库,搜索该术语,并以数组形式返回结果。
然后调用第二个函数,打印数组,并根据是否找到任何结果输出-1
或0
。
最后应该检查结果是否不等于0
,如果是,则打印出没有找到结果。
一切正常,但我的结果是打印两次。知道为什么吗?
#!/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;
}
答案 0 :(得分:1)
您正在调用&function2(@array);
两次,这会导致"\n", "@array", "\n"
两次打印。只需调用函数一次,将返回值存储在变量中,然后测试变量而不是再次调用函数 - 或者更好的是,在这个特定的实例中,你可以完全省去第一个调用。