Я написал сценарий, который принимает аргумент командной строки -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', в котором вы печатаете там и в' if'. – squiguy
Я по-прежнему очень новичок в этом. Таким образом, использование «if» заставляет его фактически запускать, а не просто оценивать дело? Если да, то каков наилучший способ избежать этого? – user2361820
Да, каждый раз, когда вы вызываете функцию, она будет ее оценивать. Я знаю, это кажется странным. Но как насчет того, чтобы назначить переменную функции и проверить ее в 'if'? Все, что имеет смысл для вас. – squiguy