Опитвам се да настроя основна система за проверка на грешки, където да улавя грешки в обвивката, изпълнявани от системно повикване. execute_command е webmin функция, която изпълнява системно повикване и след това задава съобщение за грешка на своя 4-ти параметър. По принцип извиквам execute_command_error("adduser test"), като знам, че вече имам създаден потребител, наречен test, и въз основа на моите предварително дефинирани масиви, ID очаква да се отпечата
Не може да се добави потребител
Не може да се добави този потребител, защото той вече съществува в системата.
но вместо това получавам:
ъъъъъъъъъъъъъ?
Uhhhhhhhhh?
Проверих, че $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};