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。これは非常に強力ですが、すべてが同等のデータ構造に評価できる形式に文字列化されるわけではありません。よく考えられたメタプログラミングを除いて、string-evalを使用しないでください。 。)

参照と複雑なデータ構造の詳細については、perlrefperlreftutperldscがおもしろいかもしれません。

于 2013-02-04T00:50:06.797 に答える