LoginSignup
9
9

More than 5 years have passed since last update.

perl - length @array

Last updated at Posted at 2015-09-24

ご無沙汰しております。

my @a = split /,/,"";
warn length @a; # 1 # 訂正前

何を隠そう、ワシも時々やってしまうので。

Perlの配列要素数を、length()でやってはいけません。

This function cannot be used on an entire array or hash to find out how many elements these have. For that, use scalar @array and scalar keys %hash , respectively.

手短には 0+@array

これだけ知っていれば使う分には十分なのだけど、length(@array)が構文として正しいとなると、一体どういう意味なのかも知っておきたいのがハカーの佐賀。

length @array # って一体…

というわけで答えを見る前に、一つクイズを。以下のコードは何を出力するか。

my @array = (1..42);
print length @array;

正解は、2

ではこれは?

my @array = (0..0xffff);
print length @array;

正解は、5

これでなんとなく察しがついたのではなかろうか。こういうことだったのである。

  • length @array
  • length (scalar @array)
  • length 65536
  • length "65536"
  • 5

個人的には、"length"という単語を要素数にあてるのは不適切だと思っている。その意味でPerlのlength()が文字列の文字数を数える以外の意味を持たないのは正しい一方、文脈=contextを読みすぎてlength @arrayにあさっての答えを返してしまうのはひどい地雷だとも思う(use warnings;で警告してくれるとはいえ)。

要素数は"count"とかの方がよいのではないか。Objective-CやSwiftのように。

Dan the Man with too Many Elements to Count

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9