2012-06-20 12 views
5


kullanılarak referans olarak altyordamlarını çağıran Sorunlar, bunu gibi referans (ya ada) tarafından bir işlevi çağırmak edebiliyoruz: Ne yapmaya çalışıyorum kullanımPerl: Perl bir karma değer

my $functionName = 'someFunction'; 
    &$functionName(); 

    #someFunction defined here: 
    sub someFunction { print "Hello World!"; } 

olduğunu bir hash gelen, bu nedenle böyle bir değeri: Ben olsun

my %hash = (
     functionName => 'someFunction', 
    ); 

    &$hash{functionName}(); 

    #someFunction defined here: 
    sub someFunction { print "Hello World!"; } 

Ve hata Küresel sembolü "$ karma" açık paket adını gerektirir.

Sorum şu: Bir ara değişken kullanmadan bunu yapmak için doğru bir yol var mı?
Bu konuda herhangi bir yardım çok takdir edilecektir!

+3

Ayrıca 'stric no' gerektirmeyen '% hash = (function => \ & someFunction)' işlevini de yapabilirsiniz t 'refs'. – TLP

+0

@TLP +1, ben * bu * cevap verecektim. '' use strict; 'kaydeder ** çok fazla sorun ... – Dallaylaen

+0

Bunu kullanabiliyorum, ancak biraz okunamayan kodlar ekliyor (şimdilik) ... Fonksiyonel fonksiyonun değerini dinamik olarak ayarlıyorum ve Bir işlevi adına göre çağırmak. Perl çok eğlenceli! – Thumper

cevap

12

Sadece eğrileri ihmal etmeden çözülebilen bir öncelik sorunu var.

endeksler arasında olmak üzere
$hash{functionName}->() 

, -> atlanabilir (ama burada bunu ihmal etmeyin): Sen

&{ $hash{functionName} }() 

kullanmak Veya alternatif sözdizimi kullanabilirsiniz

$hash{functionName}() 

Ref: Deferencing Syntax

+0

Vay, bu şimdiye kadar sorduğum ilk soru ve uzun bir bekleyiş bekliyordum. Çok teşekkür ederim! Gönderdiğiniz ilk çözümü kullanarak sona erdim. Harika şeyler! Çok teşekkür ederim. – Thumper

+0

Ayrıca, Perl'e (belki bir aylık tecrübe) oldukça yeni olduğumu söylemeyi unuttum, bu yüzden profesyonel gelişimime gerçekten yardımcı olacak. – Thumper

+1

Biraz şaşırıyorum çünkü çoğu insan ok gösterimini en çok okunabilir buluyor, ancak her ikisi de kabul edilebilir. – ikegami