2

Mason 1.xコンポーネントページを作成していますが、期待どおりに動作していません。perlsubのマニュアルページは、my変数が。内でアクセス可能であることを示していますsub。しかし、次のコード:

my @myOrderBy = @orderBy;
sub sortAll
{
  my $ret = 0;
  foreach my $sortStr (@myOrderBy)
  {
  }
}

私にエラーを与えています:

/opt/rt4/local/plugins/RTx-Foo/html/cf/helpers/ticketQuery.ajxのコンパイル中にエラーが発生しました:変数「@myOrderBy」は/ opt / rt4 / local / plugins / RTx-Foo/htmlでは使用できません/cf/helpers/ticketQuery.ajx行206。

(206行目はforeach行です)

同じコードは、メイソン以外のコンテキストでも正常に機能します。

4

3 に答える 3

8

Masonは、コードをsubでラップしているようです(mod_perlのように)。つまり、あなたは次のようなものになってしまうということです

$ perl -we'sub { my $x; sub sortAll { $x } }'
Variable "$x" is not available at -e line 1.

説明は複雑ですが、要約すると次のようになります。Perlはネストされた名前付きサブをサポートしていません。そうしようとすると、奇妙なエラーが発生します。

このような状況local our $x;ではなく、使用することをお勧めしますか?my $x;

于 2012-12-30T02:47:11.073 に答える
1

Masonコンポーネントで名前付きサブを使用しないでください。名前空間は共有されます。代わりにこれを使用してください:

私の$sortall= sub {...};

于 2013-12-27T10:38:18.790 に答える
-3

my変数は、宣言されているコードブロック内でのみ表示されます。これsubは別のコードブロックであるため、@myOrderByはその中で使用できません。http://www.perlmonks.org/index.pl?node_id=66677を参照してください

于 2012-12-30T02:31:11.157 に答える