2011-09-19 34 views

回答

2

我改變了一些東西,但這可能適合您的需求。

首先您必須使用no strict 'refs'編譯指示,才能使用符號引用。然後你必須從詞法變量切換到包變量(用our定義)。

我選擇將狹窄自由區的擴展範圍限制在一個用大括號括起來的區域中:它可以爲您在將來節省幾個頭痛。

#!/usr/bin/perl -w 

use strict; 
{ 
    no strict 'refs'; 
    our %VIEW_hash = ('a' => 'A', 'b' => 'B', 'c' => 'C'); 
    my $X = 'VIEW'; 
    my $name = "$X".'_hash'; 

    foreach (keys %$name) { 
     printf "%s -- %s\n", $_, $$name{ $_ }; 
    } 
} 
5

我懷疑你真的需要做這種方式。最有可能的是,你只是想打破規則,因爲你不知道更好的方式來做到這一點。

考慮使用散列文本鏈接存儲到您實際的數組:

my %VIEW_hash = ('a' => 'A', 'b' => 'B', 'c' => 'C'); 
my $X = "VIEW"; 
my $name = "$X"."_hash"; 

# Our new code 
my %meta = ("VIEW_hash" => \%VIEW_hash); 
my $href = $meta{$name}; 

say @$href{"a".."c"}; 
say $href->{a} 
+1

我同意,不違反規則。只有當你真的需要時,並且只有在沒有其他方式完成工作時才這樣做。 –

相關問題