我正在尝试这个简单的电话:
DataB::testTable::Manager->get_testTable( query => [ id => $id, name => $name ] )
完美无缺。但是可以为查询传递变量。类似的东西:
$query = "id => $id , name => $name";
DataB::testTable::Manager->get_testTable( query => [ $query ] );
或类似的东西。
答案 0 :(得分:1)
字符串和复杂的数据结构完全不同。
字符串是一系列代码点/字形/字节(取决于您的查找方式)。字符串是愚蠢的。字符串不擅长包含复杂和/或分层数据。 (以防万一:XML是纯粹的痛苦)
但是,您可以使用引用将任何Perl数据结构放入标量变量中。方括号创建对匿名数组的引用。
这些行组是等效的,除了引入变量名这一事实:
DataB::testTable::Manager->get_testTable( query => [ id => $id, name => $name ] );
my @query = (id => $id, name => $name);
DataB::testTable::Manager->get_testTable(query => \@query); # the "\" takes a reference to a value
my @query = (id => $id, name => $name);
DataB::testTable::Manager->get_testTable(query => [@query]); # using "[]" to make the arrayref. The reference points to a copy of @query.
# this solution is probably best:
my $query = [ id => $id, name => $name ]; # "[]" makes an arrayref
DataB::testTable::Manager->get_testTable(query => $query);
使用对数据结构的引用比使用字符串更好。
(您可以通过eval
将字符串解释为Perl源代码。这非常强大,但并非所有字符串都可以转换为可以等效为等效数据结构的表单。不要使用字符串 - eval,除了深思熟虑的元编程。)
有关参考和复杂数据结构的更多信息,perlref,perlreftut和perldsc可能会很有趣。