私はPerlで状態マシンを作ろうとしています。これを行うために、私は配列がstatenamesによって索引付けされています。私はこの配列にサブを置くことができます。このように:Perlが配列の内部にあるサブルーチンを呼び出す
use constant {
stInit => 0,
stHeader => 1,
stSalesHeader => 2,
stCatagory => 3,
stData => 4,
stTotal => 5,
stError => 6,
};
my $state = stInit;
my @actions;
$actions[stInit] = [sub{logState("Initial state entered",2) }];
$actions[stHeader] = [sub{logState("Header state entered",2) }];
$actions[stSalesHeader] = [sub{logState("Sales header state entered",2) }];
$actions[stCatagory] = [sub{logState("Category state entered",2) }];
$actions[stData] = [sub{logState("Data state entered",2) }];
$actions[stTotal] = [sub{logState("Total state entered",2) }];
しかし、その後、私はどのようにサブルーチンを呼び出すには考えています。私はこれを試しました
$actions[$state]
しかし、それは動作していないようです。これは可能ですか、それとも完全にオフですか?
&{$actions[$state]}();
しかし、あなたのコードに基づいて、@actionsは、サブルーチンの参照を含めることはできませんが、サブルーチンの宣言に、配列の参照:参照からサブルーチンを呼び出すために
'()'を使うと、間違って '@ _ 'を継承することを避け、'& 'を使って誤って継承するのを避けることができます。悪い習慣IMOです。 –
確かに。 '&'の非難解な唯一の使用法は '\&mysub'を使ってサブルーチンへの参照にアクセスすることです。それは何年もの間このようになってきました。 – Borodin
@Borodin、 '$ ref - >()'と同様に、 '&$ ref()'も '@ _'を継承しません。 – ikegami