【问题标题】:How to pass a a string variable as "query" for get Manager call?如何将字符串变量作为“查询”传递给 get Manager 调用?
【发布时间】:2013-02-03 23:41:18
【问题描述】:

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

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

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

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

或类似的东西。

【问题讨论】:

标签: perl mason rose-db-object


【解决方案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 源代码。这非常强大,但并非所有内容都可以字符串化为可以评估为等效数据结构的形式。不要使用字符串评估,除了经过深思熟虑的元编程。)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-15
    • 2012-06-25
    • 2019-02-15
    • 2015-12-25
    • 1970-01-01
    • 2019-07-13
    • 2020-05-27
    相关资源
    最近更新 更多