0

我正在尝试打这个简单的电话:

DataB::testTable::Manager->get_testTable( query => [ id => $id, name => $name ] )

效果很好。但是是否可以为查询传递一个变量。就像是:

$query = "id => $id , name => $name";
DataB::testTable::Manager->get_testTable( query => [ $query ] );

或类似的东西。

4

1 回答 1

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);

使用对数据结构的引用比使用字符串更好。

(您可以通过 将字符串解释为 Perl 源代码eval。这非常强大,但并非所有内容都可以字符串化为可以评估为等效数据结构的形式。不要使用字符串评估,除非经过深思熟虑的元编程.)

有关引用和复杂数据结构的更多信息,perlrefperlreftutperldsc可能会很有趣。

于 2013-02-04T00:50:06.797 回答