【perl】pop関数とdefined関数〜配列の一番最後の要素を取り出す・変数が未定義かどうか調べる
#! /usr/bin/perl use strict; use warnings; my @array = qw(45 777 111 222 333); my $array = @array; print "@array\n"; #出力結果 => 45 777 111 222 333 =>@arrayの要素を出力。 print "$array\n"; #出力結果 => 5 =>@arrayの要素数を出力。 print "$array[$#array]\n"; #出力結果 => 333 =>@arrayの一番最後の要素を出力。 print "$#array\n"; #出力結果 => 4 =>@arrayの一番最後の添え字を出力。 print "\n"; #◎pop関数を用いて、配列の一番最後の要素を取り出しましょう。 my $item = pop(@array); $array = @array; print "$item\n"; #出力結果 => 333 =>@arrayの一番最後の要素を取り出して出力。 print "@array\n"; #出力結果 => 45 777 111 222 =>@arrayの要素を出力。333が取り除かれている。 print "$array\n"; #出力結果 => 4 =>@arrayの要素数を出力。 print "$array[$#array]\n"; #出力結果 => 222 =>@arrayの一番最後の要素を出力。 print "$#array\n"; #出力結果 => 3 =>@arrayの一番最後の添え字を出力。 print "\n"; #◎pop関数で配列の要素を全部取り出すとどうなるの? $item = pop(@array); print "$item\n";#出力結果 => 222 $item = pop(@array); print "$item\n";#出力結果 => 111 $item = pop(@array); print "$item\n";#出力結果 => 777 $item = pop(@array); print "$item\n";#出力結果 => 45 $item = pop(@array); print "$item\n";#出力結果 => エラー print "\n"; #◎defined関数で、本当に配列が未定義(undef)になったのか確認してみよう。 if (defined($item)){ print "$item\n"; }else{ print "undef\n"; } #出力結果 => undef =>配列arrayはホントに未定義になっちゃった。 =head #◎空の配列にpop関数を使うとどうなるの? my @array2 =(); my $item1 = pop(@array2); print $item1; #$item1が初期化されていないと警告される。 =cut
まとめは以下。
(1)pop(@要素を削り取りたい配列名) 例)my $item = pop(@array); →@arrayの一番最後の要素を削り取って$itemに代入。@arrayには、削り取られた要素以外が残っている。 (2)defined(EXPR) EXPRを未定義か定義済みかを判定する。 ・定義済みのとき→「真」を返す ・未定義のとき→→「偽」を返す ※未定義とは…変数が文字も数値も持たないNULLのとき cf)if文やwhile文 未定義と空文字、0の区別をつけずに、「偽」として返す。 →「未定義・定義済み」と「空文字・0」を区別したいときにdefinedを使う。