qw演算子を使った配列の初期化

配列の初期化を行う時は qw 演算子が使うと便利です。 qw 演算子は一覧の文字列を空白文字を区切りとして分割したリストを返してくれます。ここでは Perl で配列を初期化するときに qw 演算子を利用する方法について解説します。

(Last modified: )

qw演算子の使い方

qw 演算子の書式は次の通りです。

qw/ 対象となる文字列 /

対象となる文字列には例えば「東京都 大阪府 愛知県 岩手県」のような文字列を指定します。

qw/ 東京都 大阪府 愛知県 岩手県 /

この文字列を空白文字(スペースや改行、タブなど)を区切りとして文字列を分割します。そして分割された単語を要素とするリストを作成します。この時連続した空白文字は 1 つの区切りとして扱われます。つまり次のように記述した場合と同じです。

('東京都', '大阪府', '愛知県', '岩手県')

qw 演算子で指定した文字列はシングルクォートで囲まれたものとして扱われますので文字列の中にエスケープシーケンス(一部除く)や変数などを記述しても特別な意味は持ちません。

このように qw 演算子を使うことでリストの代わりとすることができるため、例えば配列の初期化を行うときにリストを記述する代わりに qw 演算子を使って次のように記述することができます。

my @pref = qw/ 東京都 大阪府 愛知県 岩手県 /;

qw演算子の区切り文字

qw 演算子では対象となる文字列がどこからどこまでなのかを示すために同じ記号を使って区切り文字とします(ここでの区切り文字は対象の文字列を区分するための空白文字のことではなく、対象の文字列がどこからどこからなのかを示すための区切り文字です)。

先ほどの例では区切り文字として / を使っていましたが、同じ記号であれば区切り文字はどんな文字でも構いません。また次の 4 つの場合は同じ記号でなくても使用できます。

qw( 対象となる文字列 )
qw{ 対象となる文字列 }
qw[ 対象となる文字列 ]
qw< 対象となる文字列 >

区切り文字が対象の文字列の中に含まれている場合は \ 記号を使ってエスケープシーケンスを行うことができます。

my @sample = qw/ abc d\/g eea /;

ただエスケープシーケンスを行うかわりに区切り文字を変更するほうが簡単な場合もあります。

my @sample = qw( abc d/g eea );
サンプルコード

それでは簡単なサンプルを作成します。

use strict;
use warnings;
use utf8;
binmode STDIN, ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';

my @name = qw/ 伊藤 工藤 山田 /;

for (my $i = 0; $i < 3; $i++){
  print "$name[$i]\n";
}

テキストエディタでプログラムを記述したあと sample.pl という名前で保存します。(文字コードは UTF-8 です)。コマンドプロンプトを起動し、プログラムを保存したディレクトリへ移動したあとで次のように実行します。

perl sample.pl

次のように実行結果が表示されます。

qw演算子を使った配列の初期化(1)

qw 演算子を使って配列の初期化を行ったあとで、配列の各要素に格納されている値を取得して画面に出力しました。

-- --

Perl でリストを作成する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。