我正在用 Perl 撰寫一個函式,其中一個字串作為引數傳遞,我需要將字串解釋為參考的值。字串看起來像這樣:
"Edible => 1;Fruit => STRAWBERRY;"
現在,變數部分將使用散列存盤,但是,值已經使用常量定義。我的問題是,一旦將值存盤到臨時變數中,如何將其轉換為常量的值?這是一些示例代碼:
#!/usr/bin/perl
require Exporter;
our @ISA = 'Exporter';
our @EXPORT = qw(STRAWBERRY TANGERINE PEAR APPLE PERSIMMON FUNC_Interpreter);
use constant {
STRAWBERRY => 1
,TANGERINE => 2
,PEAR => 3
,APPLE => 4
,PERSIMMON => 5
};
sub FUNC_Interpreter {
my ($analyze_this) = @_;
my @values;
foreach my $str (split (/;/, $analyze_this)) {
my ($key, $value) = split /=>/, $str;
push (@values, @{[ $value ]}); # Problem line! I want to store the numeric value here. This doesn't work... :(
}
}
FUNC_Interpreter ("HELLO=>TANGERINE;HELLO=>STRAWBERRY");
所以基本上,我想做的是將一個字串(實際上是存盤在變數中的常量的名稱)轉換為常量的值。這可能嗎?
uj5u.com熱心網友回復:
常量可以被視為子項。
{
no strict qw( refs );
push @values, $value->();
}
或者
push @values, ( \&$value )->();
但這是一種駭人聽聞的冒險方法。第二個版本甚至隱藏了您危險地允許用戶呼叫任何包中的任何子。我會做什么:
my %lookup;
BEGIN {
%lookup = (
STRAWBERRY => 1,
TANGERINE => 2,
PEAR => 3,
APPLE => 4,
PERSIMMON => 5,
);
}
use constant \%lookup;
push @values, $lookup{ $value };
使用這種方法,可以簡單地驗證輸入,而無效的輸入只會導致 undef。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/466453.html
