• 締切済み

配列の処理で・・・

@data = (aaa, bbb, ccc, ddd, eee, fff); if(@data == ccc);{ print "ccc"; } これを書いても偽がかえって来ます。 @dataの中に○○○があれば真をかえすようなものを作りたいのですがどうしたらいいでしょうか

みんなの回答

  • gorusura
  • ベストアンサー率59% (25/42)
回答No.6

@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)
回答No.5

== は数値用の評価ですので 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;

回答No.4

評価用にハッシュを用意する、という方法もあり。 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)
回答No.3

文字列として比較をしたいのなら == を使っちゃダメですよ。 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)
回答No.2

>偽が返ってくるということはエラーにはなならなかったのですね。 しっかり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)
回答No.1

@dataは配列だから、そのまま==してもマッチしないと思います。 また、if($data == ccc);{ の ; は不要のような気がしますが、偽が返ってくるということはエラーにはならなかったのですね。 foreach $data(@data){ if($data == ccc){ print "ccc"; } }

関連するQ&A

専門家に質問してみよう