【发布时间】:2010-11-07 06:10:44
【问题描述】:
我正在尝试设置一个基本的错误检查系统,它将捕获由系统调用运行的 shell 错误。 execute_command 是一个 webmin 函数,它运行系统调用,然后将错误消息设置为其第 4 个参数。我基本上调用 execute_command_error("adduser test"),知道我已经创建了一个名为 test 的用户,并且基于我的预定义数组,我希望它能够打印
无法添加用户
无法添加 添加该用户,因为它已经 存在于系统中。
但我得到了:
呃呃呃呃呃?
嗯嗯嗯?
我已经验证 $exe 和 $return 分别是“adduser”和 1。 我对数组不了解什么?它似乎忽略了字符串和或数字,而只是按照最后一个包含 3 个元素的定义。有什么解决方案,或者更好的解决方案?
代码如下:
$ErrorMsg['adduser',1,'title'] = "Unable to add user";
$ErrorMsg['adduser',1,'msg'] = "Unable to add that user because it already exists on the system.";
$ErrorMsg['random',2,'duaisdhai'] = "Uhhhhhhhhh?";
sub execute_command_error
{
my $error = "";
my $cmd = $_[0];
$return = execute_command($cmd, undef, undef, \$error)>>8;
if ($error) {
my ($exe) = $cmd =~ m|^(.*?)[ ]|;
$exe_title = $ErrorMsg[$exe,$return,'title'];
$exe_msg = $ErrorMsg[$exe,$return,'msg'];
print $exe_title."<br>";
print $exe_msg ."<br>";
}
}
更新:
我在想我需要使用哈希,我不知道为什么我认为我可以在索引中使用字符串。话虽如此,但很少有研究使我得出这样的结论:
%ErrorMsgs = ('adduser' => {
'1' => {
'title' => 'Unable to add user',
'msg' => 'Unable to add that user because it already exists on the system.',
},
},
);
现在我将如何使用变量来引用它?因为这些都不起作用:
$exe_title = $ErrorMsgs{"$exe"}{"$return"}{"title"};
$exe_title = $ErrorMsgs{$exe}{$return}{title};
【问题讨论】:
标签: perl arrays multidimensional-array