「Perl でインスタンス メソッドにモンキー パッチを適用するにはどうすればよいですか?」の冒頭で説明した手法を使用して、パッケージにモンキー パッチを適用しています。. 私が直面している問題は、元のサブルーチンがパッケージ レベルのmy変数を使用していたことです。パッチを適用したサブルーチンは、フル パスの指定または暗黙的な使用によってアクセスできないようです。
パッチを適用したサブルーチンで使用するために、この方法で範囲指定されたデータを取得する方法はありますか?
「Perl でインスタンス メソッドにモンキー パッチを適用するにはどうすればよいですか?」の冒頭で説明した手法を使用して、パッケージにモンキー パッチを適用しています。. 私が直面している問題は、元のサブルーチンがパッケージ レベルのmy変数を使用していたことです。パッチを適用したサブルーチンは、フル パスの指定または暗黙的な使用によってアクセスできないようです。
パッチを適用したサブルーチンで使用するために、この方法で範囲指定されたデータを取得する方法はありますか?
PadWalkerモジュールを使用して字句を取得できます。悪ですが、それは機能します。
いいえ。あなたが間違っているのは、それらがパッケージスコープではないということです。レキシカル変数は、定義上、そのレキシカル スコープ、つまり変数が入っているブロックに限定されます。
レキシカル (つまり、'my' で宣言されたもの) は、それらが宣言されているレキシカル スコープ (ファイルまたはブロック) の外では見えません。それがレキシカル変数の要点です。
レキシカル var と同じスコープ内にあるサブルーチン/メソッドがある場合、レキシカルの値を返すことができ、そのスコープ外から var への間接アクセスを許可できます。
レキシカル変数には「絶対パス指定」などというものはありません。これはパッケージ変数用です。var が「my」ではなく「our」で宣言されている場合は、それを行うことができます。