使用perl动态调用sub

use*_*872 0 perl dynamic

我有4个子rountines(sub room1 {do stuuf ...},sub room2 {do stuff ...},sub room3 {do other stuff ...})将在例程中执行不同的操作.

我想要做的是能够基于变量名称动态调用例程.

例如,

if ($currentRoom == 1) { &room1; } 
if ($currentRoom == 2) { &room2; }
if ($currentRoom == 3) { &room3; }
Run Code Online (Sandbox Code Playgroud)

我宁愿做的只是使用$ currentRoom作为&room之后的值调用正确的子例程.类似于&room {$ currentRoom};

可以这样做,如果是这样,我怎么能做到这一点.

Mil*_*ler 16

创建一个与房间号相关的哈希值到子例程引用:

my %room_actions = (
    1 => \&room1,
    2 => \&room2,
    3 => \&room3,
);

if ($room_actions{$currentRoom}) {
    $room_actions{$currentRoom}->();
} else {
    die "room doesn't exist: $currentRoom";
}
Run Code Online (Sandbox Code Playgroud)

  • 我不确定你真正想要构建什么,但我觉得有点奇怪,每个房间号都有160个不同的子程序.它们有什么不同吗?你真的需要160个完全不同的代码吗? - 您可能需要退后一步,再看看要解决的问题.当然,很多这些房间都有很多共同之处.您可以使用`$ CurrentRoom`作为参数编写一个子例程. - 米勒是对的,使用哈希作为调度表通常是要走的路.但无论你选择什么解决方案,写160个潜艇都是很多工作! (6认同)