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を利用したときにそんなことを感じました。