为什么我的输出打印出两次?
问题描述:
我写了一个脚本,它采用命令行参数-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;
}
答
你打电话&function2(@array);
两次,这会导致"\n", "@array", "\n"
被打印两次。只需调用函数一次,将返回值存储在一个变量中,然后测试变量而不是再次调用函数 - 或者,更好的是,在这个特定的情况下,您可以完全免除第一次调用。
+0
完美,谢谢 – user2361820 2013-05-10 20:51:58
跳过代码后,看起来像调用'function2'两次,在其中打印并在'if'中打印。 – squiguy 2013-05-10 20:46:23
我对此仍然非常陌生。因此,使用“if”会导致它实际运行,而不仅仅是评估案例?如果是的话,避免这种情况最好采取什么行动? – user2361820 2013-05-10 20:48:29
是的,每次你调用一个函数,它都会评估它。我知道这似乎很奇怪。但是,如何为函数分配一个变量并检查你的'if'?无论对你有意义。 – squiguy 2013-05-10 20:51:13