2017-12-15 14 views
2

私は1つのプレゼンテーションから別のプレゼンテーションにコンテンツをマッピングするのが好きで、私はそれを行う "perl'ish"の方法を探しています。Perl: "perl'ish"の方法での値のマッピング

サンプル:

"ok" -> 1 
"nok" -> 0 
else -> -1 

私の溶液は透明ではなく、非常にエレガントです。また、3つ以上の可能なマッピング(0,1、-1)がある場合は痛みです。

my $val = "ok"; 
if ($val eq "ok") 
{ 
    $val = 1; 
} 
elsif ($val eq "nok") 
{ 
    $val = 0; 
} 
else 
{ 
    $val = -1; 
} 

私はハッシュを使うことができますが、私はまだelse部分を処理する必要があります。

$val = "ok"; 
my %h = ("ok" => 1, "nok" => 0); 
if (defined ($h {$val}) 
{ 
    $val = $h {$val}; 
} 
else 
{ 
    $val = -1; 
} 

1つのライナーで行うことはできますが、それでも可読ですか?

ありがとうございます!

+0

'$ valを=(定義された($ hを{$ val})?$ h {$ val}:-1; ' – toolic

+6

$ val = $ h {$ val} // -1' – Borodin

+3

@Borodin:ああスナップ:-) –

答えて

6

existsはおそらくdefinedよりも安全なチェックです。

my %translate = (ok => 1, nok => 0); 

$val = exists $translate{$val} ? $translate{$val} : -1; 

しかし、あなたは、ハッシュ値のどれもが今までundefならないことを確認することができます場合は、「定義された、または」演算子を使用することができます

$val = $translate{$val} // -1; 
関連する問題