サブルーチンへのリファレンス
たとえば、何かの関数のリターン値が想定でき、リターン値毎にサブルーチンをコールする場合、普通の言語では、if文でロジックを組みます。
Perlでは、もちろんif文でも大丈夫ですが、Perl的(謎)にはリターン値をハッシュキーとして、サブルーチンへのリファレンスをハッシュ変数に格納し、コールすることができます。
use strict; my $rc = 401; my $pm = "hikisu"; # if文でのロジック(普通の言語風) if ($rc == 200) { &sub01($pm); } elsif ($rc == 401) { &sub02($pm); } elsif ($rc == 403) { &sub03($pm); } else{ print "サブルーチン該当なし\n"; } # サブルーチンリファレンスをハッシュに格納 my %sub; $sub{200} = \&sub01; $sub{401} = \&sub02; $sub{403} = \&sub03; # ハッシュ値に従って該当サブがコール #eval {&{$sub{$rc}}($pm);}; #if ($@) { # $@には、エラー時にエラーメッセージが入り、状態が真となる。 # print "サブルーチン該当なし\n"; #} # 上の実行文と等価 #eval {$sub{$rc}->($pm);}; #if ($@) { # print "サブルーチン該当なし\n"; #} if ( exists $sub{$rc} ) { $sub{$rc}->($pm); } else { print "サブルーチン該当なし\n"; } #---------------------------------------------------- sub sub01 { print "--- sub01 $_[0]---\n"; } sub sub02 { print "--- sub02 $_[0]---\n"; } sub sub03 { print "--- sub03 $_[0]---\n"; }
尚、いくら想定ができても、想定内だけのロジックはよくないです。
どんな場合でも想定外を考えてロジックを組まないと、痛い目に会うぞ。