私は好きData::Aliasです。5.12では壊れているようです。修正できますか?すぐに修正されますか?良い代替手段はありますか?
3 に答える
バージョン1.08より前にData::Aliasビルドされたバージョン(2010年10月22日にリリースされたBST)は、1.08より前のバージョンがPerl 5.12Data::Aliasで壊れているため、Perl5.12では動作しません。最新バージョン(1.08以降)にアップグレードすると、機能するはずです。
興味深い補足として、エイリアスを実行できるようになることは、将来、言語機能としてPerlに導入される可能性があり、クリーンアップは:= 空の属性リストを意味しなくなります。それを楽しみに待つ!:)
モジュールは2007年以降更新されていませんが、いつでも作成者(Matthijs van Duin:xmath@cpan.org)にメッセージを送信したり、Robertが回答で述べたようにバグレポートを提出したりできます。
いくつかの選択肢があります:
5.12+で機能するエイリアシング用の追加のCPANモジュールに関する限り:
- Variable::Alias-クリーンな構文
- Tie::Alias-純粋なperlソリューション
- Lexical::Alias- クリーンな構文
- Devel::LexAlias-少し低いレベル
そして、CPANで「エイリアス」を検索すると、さらにいくつかの結果が得られますが、Data::Aliasの「このステートメントのエイリアスですべてを行う」機能を提供するものはないようです。したがって、
Data::Alias修正されるまで、上記のいずれか、または次の純粋なPerlメソッドを使用できます。Perlには、シンボルテーブルに存在する変数への変数のエイリアシングのサポートが組み込まれています。これは次のように行われます。
my $x = 1; our $y; # declare $y in the symbol table for the current package { local *y = \$x; # make $y an alias of $x in the current scope $y++; } print $x; # prints 2ただし、いつものように、動的スコープ/ローカルが実際に何をするかを知ってから使用してください。
字句スカラーは、forループのスコープ内でエイリアスとして使用できます。
my $x = 1; for my $y ($x) { $y++; } print $x; # prints 2このタイプの字句エイリアスは、必要に応じてクロージャーのループから渡すこともできます
サブルーチン引数リストのPerlのエイリアシングマジックを使用して配列エイリアスを作成できます。
my $x = 1; my $alias = sub{\@_}->($x); # return a reference to its argument list, # which maintains its aliases $$alias[0]++; print $x; # prints 2ただし、構文が異なるだけで、参照よりも多くの機能が実際に提供されるわけではありません。
そして、Perlの参照を使用した例:
my $x = 1; my $y = \$x; # take a reference to $x $$y++; # dereference $y print $x; # prints 2
私はちょうど別の潜在的なオプションを見つけました:Scalar::Alias、これはPerl5.12で動作するようです。明らかに、スカラーのエイリアスのみですが、等号の代わりに太いコンマは必要ありません。