argius note

プログラミング関連

ある要素が配列に含まれているかを調べる一般的な方法は?

Javaなら Collection.contains(Object) 、Rubyなら ary.include?(val) を使うと思いますが、Perlの場合はどうやるのが一般的なのでしたっけ?

スクリプトを書いていて、そういう関数があるのかどうか思い出せず、時間がないので defined関数 を使ってやってしまいました。
注(2009.05.18): この場合は、definedではなく、exists関数を使うべき。

my %hash = map { $_, 1_ } ("APPLE", "BEER", "CANDY");

print "BEER!\n" if defined $hash{"BEER"};
print "no DONUT!\n" unless defined $hash{"DONUT"};

本当はこういう関数があると良いのかも。

sub count {
  my @a = @_;
  my $key = pop @a;
  my $count = grep $_ eq $key, @a;
}

my @list = ("APPLE", "BEER", "CANDY");
print count(@list, "APPLE"), "\n";

push @list, "BEER";
print count(@list, "BEER"), "\n";

print "BEER!\n" if count(@list, "BEER") > 0;

しかし、ちょっとしたスクリプトで、わざわざ関数を定義するのも大げさな気がします。如何したものでしょう。