- 締切済み
配列の処理で・・・
@data = (aaa, bbb, ccc, ddd, eee, fff); if(@data == ccc);{ print "ccc"; } これを書いても偽がかえって来ます。 @dataの中に○○○があれば真をかえすようなものを作りたいのですがどうしたらいいでしょうか
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- gorusura
- ベストアンサー率59% (25/42)
@data = (aaa, bbb, ccc, ddd, eee, fff); if(@data == ccc){ print "ccc"; } @dataがcccと等しければ、という風になりますが、全く等しくないですね。 なので、偽が返ります。 my @data=('aaa','bbb','ccc','ddd','eee','fff'); for(@data){ print'ccc'if $_ eq'ccc'; } こうすると、成功します。
- moon_night
- ベストアンサー率32% (598/1831)
== は数値用の評価ですので eq を使用します。 文字列はクウォーテーションで囲ってください。 途中の ; は不要です。 配列は展開しないと評価できません。 # 何も考えずやるなら @data = (aaa, bbb, ccc, ddd, eee, fff); foreach $data (@data) { if($data eq 'ccc'){ print "ccc"; } } # 少し考えたもの @data = (aaa, bbb, ccc, ddd, eee, fff); map { print $_ if($_ eq 'ccc') } @data;
- chaimasuka
- ベストアンサー率57% (26/45)
評価用にハッシュを用意する、という方法もあり。 use strict; my @l = qw(aaa bbb ccc ddd eee); my %h = map { $_ => 1 } @l; print "ccc is in list\n" if $h{'ccc'};
- sakusaker7
- ベストアンサー率62% (800/1280)
文字列として比較をしたいのなら == を使っちゃダメですよ。 use strict; use List::MoreUtils qw(any); my @l = qw(aaa bbb ccc ddd eee); print "ccc is in list\n" if any {$_ eq 'ccc'}, @l;
- kabaokaba
- ベストアンサー率51% (724/1416)
>偽が返ってくるということはエラーにはなならなかったのですね。 しっかりsyntax errorが返されます. 閑話休題 きちんと,""で囲むとか, use strict/use warningsを使いましょう. とくに裸で文字列を書くとロクなことになりません. use strict; use warnings; my @data = ("aaa", "bbb", "ccc", "ddd", "eee", "fff"); print "ccc" if grep(/ccc/, @data)
- Suzi
- ベストアンサー率38% (130/334)
@dataは配列だから、そのまま==してもマッチしないと思います。 また、if($data == ccc);{ の ; は不要のような気がしますが、偽が返ってくるということはエラーにはならなかったのですね。 foreach $data(@data){ if($data == ccc){ print "ccc"; } }