0

コマンドライン引数を受け取り、-sその後に検索語を追加できるスクリプトを作成しました。

次に、それを最初の関数に入力し、SQL データベースに接続して用語を検索し、結果を配列で返します。

次に、2 番目の関数を呼び出し、配列を出力し、結果が見つかったかどうかに応じてa-1または aを出力します。0

最後に、結果が と等しくないかどうかをチェックし、そう0であれば、結果が見つからなかったことを出力します。

すべてが機能していますが、結果が 2 回印刷されます。理由はありますか?

#!/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;
}
4

1 に答える 1