システムコールによって実行されるシェルエラーを検出する基本エラーチェックシステムをセットアップしようとしています。 execute_commandは、システムコールを実行してエラーメッセージを4番目のパラメータに設定するwebmin関数です。私は基本的に呼び出すexecute_command_error私はすでに私の事前に定義された配列に作成され、ベースのユーザーと呼ばれるテストを持っていることを知っている(「adduserのテスト」)、idはそれを印刷することを期待整数と文字列を使用した多次元配列
追加することができませんでしたユーザを追加できません
そのユーザーは既に がシステムに存在するためです。
しかし、代わりに私が手:
Uhhhhhhhhh?
よろしいですか?
私は$ exeと$ returnが "adduser"と1、respectfullyであることを確認しました。 配列について理解していないのは何ですか?それは文字列と数字を無視して、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>";
}
}
アップデート:ここで
がTHSコードです
私はハッシュを使用する必要があることを考えています、私はインデックス内の文字列を使用することができると思った理由はわかりません。それで、ほとんど研究が私にこのような何かをもたらしました:
%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};