[英]How can I get a working Data::Alias in Perl 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.