2017-04-17 38 views
1

使用Perl的List::Util模塊,有沒有辦法從max()返回變量名稱以及實際值?例如:有沒有辦法從Perl的max函數中返回變量名?

my $a = 1; 
my $b = 2; 
my $c = 3; 

my $max = max($a,$b,$c); 

我怎樣才能得到3,以及變量名$c?我的本意是做這樣的事情:

#psuedocode 
if(max is from $c) { 
print "Max from C"; 
} 

或者可能的方式W/O List::Util做到這一點?

+1

你可以通過鍵創建哈希,例如'%H =(A => 1,B => 2,C => 3)'然後循環和節省最大值和對應的密鑰值 –

+2

List :: Util不知道它有變量。它只是看到一個列表。它爲排序/檢查獲得的值也可以是一個或多個數組,或函數的返回值。我害怕沒有運氣。 – simbabque

回答

3
sub pairmax { 
    my $name = shift; 
    my $max = shift; 
    while (@_) { 
     if ($_[1] > $max) { 
      $name = shift; 
      $max = shift; 
     } else { 
      shift; 
      shift; 
     } 
    } 

    return wantarray ? ($name,$max) : $name; 
} 

my $key_of_max = pairmax(a=>$a, b=>$b, c=>$c); 

my ($key_of_max, $max) = pairmax(a=>$a, b=>$b, c=>$c); 
相關問題