我正在尝试进行这个简单的调用:
DataB::testTable::Manager->get_testTable( query => [ id => $id, name => $name ] )
它非常好用。但是,是否可以为查询传递一个变量。类似于:
$query = "id => $id , name => $name";
DataB::testTable::Manager->get_testTable( query => [ $query ] );
或者类似的东西。
字符串是一个代码点/字形/字节的序列(取决于您的外观)。琴弦是哑的。字符串不擅长包含复杂和/或层次结构的数据。(案例要点: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源代码。这非常强大,但并不是所有字符串都指向可以被评估为等效数据结构的形式。不要使用字符串评估,除非经过深思熟虑的元编程。)
有关引用和复杂数据结构的更多信息,perlref、perlreftut和perldsc可能会很有趣。