簡體   English   中英

如何在Perl 5.12中獲得有效的Data :: Alias?

[英]How can I get a working Data::Alias in Perl 5.12?

我喜歡Data::Alias 它似乎在5.12中被破壞。 可以解決嗎? 會盡快解決嗎? 有什么不錯的選擇嗎?

在1.08之前(2010年10月22日BST發布)構建的Data::Alias任何版本都無法在Perl 5.12上使用,因為在Perl 5.12中打破了Data::Alias在1.08之前的版本。 升級到最新版本(1.08或更高版本),它應該可以工作!

作為一個有趣的旁注,似乎將來能夠將別名作為Perl的語言功能引入Perl,因為:=的清除不再意味着空的屬性列表 對此期待! :)

自2007年以來,該模塊尚未進行過更新,但是您始終可以向作者發送消息(Matthijs van Duin:xmath@cpan.org),也可以提交羅伯特在回答中提到的錯誤報告。

以下是一些替代方案:

  • 至於在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 

我剛剛發現了另一個潛在的選擇: Scalar::Alias ,它似乎在Perl 5.12中有效。 顯然,它僅是標量的別名,但不需要等號代替胖逗號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM