2007/03/11

[技術系]   perlにおいてサブルーチンからエラーを返すのは「return;」である

at 03:04JST
よく忘れてハマる…。写経のつもりで書いておこう。

my $i = subroutine() 
or die;

sub subroutine {
if ( 1 == 1 ) {
# エラー
return undef;
}
return 2;
}


としてはいけない。サブルーチンがスカラー値を返すことを前提にしているときはこれで動くが、

my @i = subroutine() 
or die;

sub subroutine {
if ( 1 == 1 ) {
# エラー
return undef;
}
return( 1, 2 );
}


のように、リストコンテキストではエラーが検知できなくなるから。

正しくは「生return」を書く。そうするとコンテキストに応じたエラーが返る。

my @i = subroutine() 
or die;

sub subroutine {
if ( 1 == 1 ) {
# エラー
return; # エラー
}
return( 1, 2 );
}


単に
return;
だと明示的でなくてわかりづらいので、
return; # エラー
と書くクセをつけてみる。

…ということを前に考えてコメントするようにしていたはずなのだが、いつのまにかだんだん忘れてまたハマった。まったく学習機能がない!
さらに過去の記事
2009/04 (1)   2008/12 (3)   2008/11 (9)   2008/10 (10)   2008/09 (20)   2008/08 (2)   2008/07 (23)   2008/06 (16)   2008/05 (22)   2008/04 (11)   2008/03 (21)   2008/02 (20)   2008/01 (21)   2007/12 (32)   2007/11 (37)   2007/10 (46)   2007/09 (63)   2007/08 (33)   2007/07 (41)   2007/06 (81)   2007/05 (173)   2007/04 (168)   2007/03 (113)   2007/02 (123)   2007/01 (92)   2006/12 (111)   2006/11 (185)   2006/10 (20)  

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。