Learning Perl Chap.3 Lists and Arrays

まとめ

  • 配列の一個一個の要素の型は全て同じである必要はない。
  • 何も要素が入ってないところはundefになる。
  • 最後の要素のインデックスを取得する方法
$last_index = $#array;
  • マイナスのインデックスの場合のは回り込んでくれるが、範囲外だとundefになる。
(1..5) #(1, 2, 3, 4, 5)
(1.7..5.7) #(1, 2, 3, 4, 5)
(5..1) #空のリスト。インクリメントしか対応していない。
  • 文字列配列を定義するときはqwが使える
  • エスケープ文字もそのまま表示
  • 配列宣言の応用例として複数変数への代入やスワップ処理が可能
  • push, popが使える (スタック)
  • shift, unshiftも使える (キュー)
  • spliceは第1引数で指定した配列に対して第2引数で指定したインデックス以降の要素を削除する。
  • 第3引数では削除する要素数
  • 第4引数ではリプレイすする配列。
  • 第3引数を0にして第4引数を指定すれば挿入処理になる。
  • 配列は文字列キャスト可能
  • foreach(以下2つの処理は同じ)
foreach my $element (@array){
    print $element;
}

foreach (@array){
	print $_;
}
  • reverseで配列を逆順にできる
  • sortで配列のそーと
  • eachで複数要素のforeachができる。
each my ($var1 $var2) (@array){
....
}
  • 配列の扱いは文脈で異なる
@array2 = @array; #配列のコピー
$n = @array; #配列の要素数
  • 改行区切りの入力
@input = <STDIN>;

Exercise

1.

#!/usr/bin/perl
use strict;
use warnings;

my @input = <STDIN>;
@input = reverse @input;

foreach(@input){
        print $_;
}

2.

#!/usr/bin/perl
use strict;
use warnings;

my @names = qw(fred betty barney dino wilma pebbles bamm-bamm);
my @input = <STDIN>;
@input = reverse @input;

foreach(@input){
        print $names[$_]." ";
}
print "\n";

3.

#!/usr/bin/perl
use strict;
use warnings;

my @input = <STDIN>;
@input = sort @input;
chomp(@input); #改行ありの時はコメントアウト
foreach my $input (@input){
        print $input." ";#改行ありの時は空白文字を除去
}

雑感
あまり内容と関係がないが、Perlは返り値が関数によって違うので困惑する。
chompを利用したときにそんなことを感じました。