3

Eclipse と PadWalker の Perl デバッガーに問題があります。以前は単純な 1 ファイルのスクリプトにのみ使用されていました。「my」を使用して宣言された変数。それらは、デバッガーの「変数」ウィンドウに正常に表示されます。

今、私は他の誰かのより複雑なスクリプトを使用していますが、「our」を使用して宣言された変数が表示されません。調査するために、非常に単純な例にまとめました

ジャンク.pl:

use strict;
use warnings;

require 'junk2.pl';

package Junk;
my $simon = "SOMETHING";
print "JUNK  " . $Junk2::james . "\n";
print "JUNK  " . $simon . "\n";

ジャンク2.pl:

package Junk2;
our $james;
$james = "FOO";

1;

コードをステップ実行すると、変数my $simonはデバッガ ウィンドウに正常に表示されますが、変数は表示されour $jamesません。デバッガーは正常に動作しています。プログラムが実行され、出力ウィンドウに正しい出力が表示されます...表示に失敗したのは変数ウィンドウだけです$james

以下のスクリーンショットは、問題を示しています。ご覧のとおり$james、Junk2 パッケージの変数は正常に出力されますが、変数の表示には表示されません。

パッケージ変数のない IDE デバッガーの表示

解決策をしばらく探していましたが、うまく一致するものが見つかりません...何かアイデアはありますか?

編集: Perl デバッガーを使用すると、パッケージ変数を「見る」ことができることがわかりました: コマンド ライン デバッガーのビュー.

padwalker が示すように、IDE でわかりやすい方法で同じ出力を表示する方法はありますか?

これまでに答えてくれた人たちに感謝します:)

4

3 に答える 3

4

ourで宣言された変数はレキシカル変数であり、パッケージ変数にエイリアスされています (修正してくれた @ikegami に感謝します):

our現在のレキシカル スコープ内で使用するために、現在のパッケージ内の同じ名前のパッケージ変数にレキシカル エイリアスを作成します。

brian d foy は、シンボル テーブルについて議論する最近の投稿をしています。

簡単に言うと、パッケージのシンボル テーブルを参照して、パッケージ変数にアクセスします。

さらに、PadWalkerにはpeek_ourメソッドがあります。Package::Stashは他の便利なヘルパーを提供します。

于 2013-08-22T15:33:13.643 に答える
2

-X の Eclipse デバッグ構成で Perl コマンド ラインに移動し、現在のパッケージ変数を表示します。

編集:

この場合、代わりに -V コマンドを使用する必要があるかもしれません。http://perldoc.perl.org/perldebug.htmlを参照してください。

編集:

Junk2::Jame​​s 変数をローカル変数に割り当てる方がおそらく簡単でしょう。

私の $james = $Junk2::james;

于 2013-08-22T15:30:58.633 に答える