だから私の質問は、このSO質問のオフに基づいています。 How to pass a subroutine as a parameter to another subroutine、またパラメータであるサブルーチンにパラメータを渡す
質問です:私もある(サブルーチンへの引数/パラメータを渡すことができますそれ自身のパラメータ)?
sub question {
print "question the term";
return 1;
}
my $question_subref = \&question;
answer($question_subref);
sub answer {
my $question_subref = shift;
print "subroutine question is used as parameters";
# call it using arrow operator if needed
$question_subref -> ($PassSomethingHere,$SomethingElse);
return 1;
}
これは可能ですか?
$ question_subref - >($ PassSomethingHere、$ SomethingElse);
相続人実際のコード:
my $SelectResults = sub {
my @results;
$sql = $_[0];
$sth = $_[1];
$sql =~ s/select/SELECT/gi;
if(StrContains($sql, "SELECT"))
{
@results= $sth->fetchrow_array();
foreach my $tab (@results) {
print $tab . "\n";
}
}
return @results;
};
sub MySQLExe
{
my @results;
my $db = "fake";
my $usr = "user";
my $pw = "password";
$db_handle = DBI->connect("dbi:mysql:database=$db;mysql_socket=/var/lib/mysql/mysql.sock;", $usr, $pw) \
or die "Connection Error: $DBI::errstr \n";
my $sql = $_[0];
print $sql . "\n";
#Prepare SQL query
my $sth = $db_handle->prepare($sql)
or die "Couldn't prepare query '$sql': $DBI::errstr\n";
$sth->execute
or die "Couldn't execute query '$sql': $DBI::errstr\n";
# I can't seem to get this to work...
# optional Function here - get rows from select statement or something else.
# pass in the function holder as the second parameter
my $Func = $_[1];
@results = $Func -> ($sql, $sth);
#disconnect from database
$sth->finish;
$db_handle->disconnect or warn "Disconnection error: $DBI::errstr \n";
return(@results);
}
と実際の使用:
my @tables = MySQLExe("SELECT table_name FROM information_schema.tables where table_schema='$table';",
$SelectResults);
実際のアプリケーションは** dbi-> mysqlサブルーチンに**変更するだけです**。私はすべての接続の開閉のものが常に同じであり、決して変わらないようにしたい。しかし、私は私のSQLステートメントと結果の配列(時には)を返す関数が必要です。アプリケーションがアプリケーションに応じて異なる機能を果たすことができれば便利ですが、その周りに道を見つけることはできません。 – m1m1k
あなたはどんな問題を抱えていますか? – ikegami
注射バグ!!! '$ table'schema = '$ table';' '' 'SELECT ... WHERE table_schema ="。$ dbh-> quote($ table) ' – ikegami