0

詳細:

1 番目のハッシュ: エラー メッセージの
ハッシュ 2 番目のハッシュ: エラー メッセージ自体 (error_name)

3 つのキー値 (statusCode、message、params) を含む

error_name を受け取り、メッセージを出力するメソッドを作成しようとしています。これは私が今持っているコードです:

`our %error = (
               ERROR_1 => {
                                     statusCode => 561.
                                     message => "an unexpected error occurred at location X",
                                     params => $param_1,
                          }
               ERROR_2 => {
                                     statusCode => 561.
                                     message => "an unexpected error occurred at location Y",
                                     params => $param_1,
                          }
);
`

これは可能ですか?ハッシュ %error からエラーを取得し、そのメッセージを出力するサブルーチンを作成しようとしています。これは可能ですか?または、もっと良い方法があるかもしれません。

4

1 に答える 1

1

構造を理解するためのいくつかの例。これらはすべて同じ意味です (わずかな違いがあります):

# just a hash
%hash = ( 'a', 1, 'b', '2' );
%hash = ( a => 1, b => '2' );
# ref to hash
$hash_ref = \%hash;
$hash_ref = { a => 1, b => 2 };

print $hash{ a }; #prints 1
print $hash_ref->{ a }; #prints 1

1 と '2' は値です。値はおそらくスカラーのみです。SOMETHING への参照もスカラーです。上記の例では $hash_ref です。

あなたの例では、最初のハッシュはリストだと言います。私はあなたが配列を意味すると思います:

$list = [ $error1, $error2 ];

$error1 = { error_name => $description }

$description = { status => 'status', message => 'msg', params => [ 1,2,'asdf'] }

サブルーチンがスカラーのリストを取得することはご存知でしょう。ハッシュをサブに渡したい場合は、このハッシュへの参照を渡すだけです

fn( \%hash );

サブでこのハッシュを取得します。

sub fn { 
    my( $hash ) =  @_;
    print $hash->{ key_name };
}

エラーのリストだけがあり、それぞれにキーが含まれていると思います:

$list_of_errors = [
    { status => 1, message => 'hello' },
    { status => 2, message => 'hello2' },
    { status => 1, message => 'hello3' },
] 

fn( $list_of_errors );

sub fn {
   my( $le ) =  @_;

   print $le->[1]{ message }; #will print 'hello2'
   # print $le->{ error_name }{ status }; #try this in case hash of hashes
}

構造をよりよく理解するには、Data::Dump モジュールを使用してみてください。

use Data::Dump qw/ pp /;
%hash = ( a => 1 );
$hash = \%hash;
$arr =  [ 1, 2, 'a' ];
print pp $hash, \%hash, $arr;

幸運を。

コード

our %error = (
    ERROR_1 => {
         statusCode => 561,
         message => "an unexpected error occurred at location X",
         params => $param_1,
    },
    ERROR_2 => {
         statusCode => 561,
         message => "an unexpected error occurred at location Y",
         params => $param_1,
   }
);

sub print_err {
    my( $err_name ) =  @_;

    print $error{ $err_name }{ message } ."\n";
}

print_err( 'ERROR_1' );
print_err( 'ERROR_2' );
于 2016-03-03T21:57:16.750 に答える