自分的にいるかなと思って
次のようなものを書いてみますた


# 第一引数の配列に第二引数の値が含まれていればtrueを返す
# ex. if (&is_contain(\@list, 100)) { ; }
sub is_contain {
my @list = @{$_[0]};
my $b = 0;
for (my $i=0; $i<($#list+1); $i++) {
if ($list[$i] == $_[1]) {
$b = 1;
}
}
return $b;
}

# 0から第一引数の最大値−1までの中で第二引数の配列の要素に含まれない値を集めた配列を返す
# ex. my @list = &get_unique_no(65536, \@list);
sub get_unique_no {
my @list = @{$_[1]};
my @unique_list;
for (my $i=0; $i<$_[0]; $i++) {
if (!&is_contain(\@list, $i)) {
push(@unique_list, $i);
}
}
return @unique_list;
}


サブルーチンの引数に配列を含む複数の引数を与えているから配列のリファレンスを使っているが、
この場合、引数に¥使う代わりに
サブルーチン内でshift使えばいーんじゃん。書き直そっかな。
ようやくPerlたんに近づけた気がした。