perlで下記のようにgrepのユーザー定義部分が長くなった場合の対策を考えています。


@data=grep{(split(/\-/,(split(/\,/,$_))[0]))[0]==$juo || (split(/\-/,(split(/\,/,$_))[0]))[1]==$juo}@data;

できれば

(split(/\-/,(split(/\,/,$_))[0]))[0]をpattern1,
(split(/\-/,(split(/\,/,$_))[0]))[0]をpattern2,

と何かで定義して

@data=grep{pattern1==$juo || pattern2==$juo}@data;
のようにして短縮したいのですが
配列部分にアクセスする定義部に関してのサブルーチンかがわかりませんので教えてください。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/03/05 22:00:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:z900 No.1

回答回数17ベストアンサー獲得回数1

ポイント60pt

同じ処理をまとめると

@data = grep {
    my @tmp = split( /\-/, ( split( /\,/, $_ ) )[0] );
    $juo == $tmp[0] || $juo == $tmp[1];
} @data;

関数にしてやるとすると

sub func {
    split( /\-/, ( split( /\,/, shift ) )[0] )
}

@data = grep {
    my @tmp = func($_);
    $juo == $tmp[0] || $juo == $tmp[1];
} @data;
id:hanting_hawk

なるほどこういうやり方もあるんですね。早速試してみます。

2008/02/28 08:38:59

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません