1. ホーム
  2. スクリプト・コラム
  3. パール

Perlで配列から値を削除する方法は?

2022-01-03 21:43:25

もしundefを"empty"として考えるなら、何らかの関係があるのでしょう。しかし、一般的に言えば、undefに何かを代入することは、何かを削除することとは異なります。

まず、配列の要素をundefに代入する方法を見て、その後、配列から要素を削除する方法を学びます。

まず、次のコードから始めてください。

コピーコード コードは以下の通りです。

use Data::Dumper qw(Dumper);
my @dwarfs = qw(Doc Grumpy Happy Sleepy Sneezy Dopey Bashful);
print Dumper \@dwarfs;

Data::Dumperを使って印刷すると、以下のような出力が得られます。
コピーコード コードは以下の通りです。

$VAR1 = [
          'Doc',
          'Grumpy',
          'Happy',
          'Sleepy',
          'Sneezy',
          'Dopey',
          'Bashful'
        ];

要素をundefに代入する

undef()関数の戻り値を使って。

コピーコード コードは以下の通りです。

use Data::Dumper qw(Dumper);
my @dwarfs = qw(Doc Grumpy Happy Sleepy Sneezy Dopey Bashful);
$dwarfs[3] = undef;
print Dumper \@dwarfs;

これらのコードは、要素番号3(配列の4番目の要素)をundefに割り当てますが、配列のサイズは変更しません:。
コピーコード コードは以下の通りです。

$VAR1 = [
          'Doc',
          'Grumpy',
          'Happy',
          undef,
          'Sneezy',
          'Dopey',
          'Bashful'
        ];

配列の要素に直接undef()関数を使っても、同じ結果になります。
コピーコード コードは以下の通りです。

use Data::Dumper qw(Dumper);
my @dwarfs = qw(Doc Grumpy Happy Sleepy Sneezy Dopey Bashful);
undef $dwarfs[3];
print Dumper \@dwarfs;

つまり、$dwarfs[3] = undef; と undef $dwarfs[3]; は同じことをする、どちらもundefに値を代入するのだ。

splice を使って配列から要素を削除する
splice 関数は、配列から要素を完全に削除する関数です。

コピーコード コードは以下の通りです。

use Data::Dumper qw(Dumper);
my @dwarfs = qw(Doc Grumpy Happy Sleepy Sneezy Dopey Bashful);
splice @dwarfs, 3, 1;
print Dumper \@dwarfs;
$VAR1 = [
          'Doc',
          'Grumpy',
          'Happy',
          'Sneezy',
          'Dopey',
          'Bashful'
        ];

この例では、配列の途中の要素を削除したため、配列が1単位分短くなっていることがおわかりいただけると思います。

これは、配列から要素を削除する方法でもあります。