5

私は好きData::Aliasです。5.12では壊れているようです。修正できますか?すぐに修正されますか?良い代替手段はありますか?

4

3 に答える 3

11

バージョン1.08より前にData::Aliasビルドされたバージョン(2010年10月22日にリリースされたBST)は、1.08より前のバージョンがPerl 5.12Data::Aliasで壊れているため、Perl5.12では動作しません。最新バージョン(1.08以降)にアップグレードすると、機能するはずです。

興味深い補足として、エイリアスを実行できるようになることは、将来、言語機能としてPerlに導入される可能性があり、クリーンアップは:= 空の属性リストを意味しなくなります。それを楽しみに待つ!:)

于 2010-05-04T21:01:27.243 に答える
5

モジュールは2007年以降更新されていませんが、いつでも作成者(Matthijs van Duin:xmath@cpan.org)にメッセージを送信したり、Robertが回答で述べたようにバグレポートを提出したりできます。

いくつかの選択肢があります:

  • 5.12+で機能するエイリアシング用の追加のCPANモジュールに関する限り:

    そして、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 
    
于 2010-05-04T21:03:41.877 に答える
0

私はちょうど別の潜在的なオプションを見つけました:Scalar::Alias、これはPerl5.12で動作するようです。明らかに、スカラーのエイリアスのみですが、等号の代わりに太いコンマは必要ありません。

于 2010-08-15T08:48:41.283 に答える