人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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;
のようにして短縮したいのですが
配列部分にアクセスする定義部に関してのサブルーチンかがわかりませんので教えてください。


●質問者: hanting_hawk
●カテゴリ:インターネット ウェブ制作
✍キーワード:grep Perl アクセス サブルーチン ユーザー
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● z900
●60ポイント

同じ処理をまとめると

@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;
◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ