プロが教える店舗&オフィスのセキュリティ対策術

おそらく単純な事だと思われますが、
不慣れなものでお付き合いいただけますとありがたいです。


if( $hoge == $testdata){
# 条件が一致した場合の処理
}

$hoge には、2 が入っています。(文字列)
$testdata には、2,6,10 が入っています。(文字列)
1対1であれば、上記の記述でいけるのですが、
カンマ区切りの復数の値と一致判定する方法がわかりません。

まず、配列にして
my @testdata_hairetu = split(/,/, $testdata);
などやってみましたが、
その後の条件文との絡みなどで詰まっています。
復数値がある場合に一つ一つ照合(判定)していく方法をご教授いただけないでしょうか。

foreachの内部でifとかかなと調べ中です。
perlは記述方法がいろいろあるようなのですが、できれば短さよりもわかり易い方が有難いです。
どうぞよろしくお願いします。

A 回答 (3件)

いくらなんでも


<@testdata_hairetu>
はなにをしたいのかわからない>#2.
    • good
    • 0

$testdataの前後に,を追加して・・


$testdata = ','.$testdata.',';
if( $testdata =~ /,$hoge,/){print "OK $hoge in \$testdata\n";}
と文字列のままチェックするのが簡単かと・・

>$hoge には、2 が入っています。(文字列)
 Perlは特に指定しなくても、その場で数値とも文字とも解釈してくれる。

my @testdata_hairetu = split(/,/, $testdata);
なら
while(<@testdata_hairetu>){
if($_ == $hoge ){$check = 1;last;}
}
if($check == 1){print "OK $hoge in \$testdata\n";}
else{print "Not foud $hoge in \$testdata\n";}

この回答への補足

ご助言ありがとうございます!
いったんデータを書き換えるところから始まるのですね。
「数値と文字」の件もありがとうございました。

ご提示いただいたソース拝見しました。
whileとforeachの使い方もよくわかっていないので、まずはそのあたりから調べてみます。

調査を進めていたところ、以下の記述で判定できる事がわかりました。

my @testdata_arr = split(/,/, $testdata);
if( grep( $_== $hoge, @testdata_arr ) > 0){
 # 条件に一致した場合の処理
}

ただ、記述の意味が把握できていないので、
どういった処理がどういった手順で成されているのか教えていただけますと嬉しいです。
普通はこういう事をしないとか、おすすめできないとか他にもあれば、なんでもご指摘ください。
(他にアドバイスいただいた方にも同様の旨、ご質問させていただきました。ご容赦ください。)

補足日時:2014/06/05 11:53
    • good
    • 0

方針はいくつも考えられるけど, 言われるように


配列にばらして for と if
が分かりやすいと思う.

まあ, だったら最初から ($testdata というスカラーの代わりに) 配列を使っておけばいいわけだが.

この回答への補足

ご助言ありがとうございます!

調査を進めていたところ、以下の記述で判定できる事がわかりました。

my @testdata_arr = split(/,/, $testdata);
if( grep( $_== $hoge, @testdata_arr ) > 0){
 # 条件に一致した場合の処理
}

ただ、記述の意味が把握できていないので、
どういった処理がどういった手順で成されているのか教えていただけますと嬉しいです。
普通はこういう事をしないとか、おすすめできないとか他にもあれば、なんでもご指摘ください。
(他にアドバイスいただいた方にも同様の旨、ご質問させていただきました。ご容赦ください。)

補足日時:2014/06/05 11:50
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!