はじめに
qw演算子とかってよく使うわりにちょくちょく調べちゃうのでちゃんと把握するためメモ
今回のきっかけはSQLAbstractのorder文の指定。
order_col => [qw/colA colB/]
こんなふーにも使えるので便利ですよね!
簡単な概要
q/string/;
シングルクォートで囲んだのと同じ。
'string'と同じで内部に変数を書いても展開しないqq/string/;
ダブルクォートで囲んだのと同じ。
"string"と同じで内部に書いた変数を展開するqw/string1 string2 string3/;
("string1", "string2", "string3")と同じ。
一覧の文字列を空白文字を区切りとして分割したリストを返す
使用例
q演算子
q_test.pl
#!/usr/bin/perl use strict; use warnings; use Data::Dumper; # 基本 my $q1 = q/japanese1/; warn Dumper $q1; # 区切り文字はついであれば'/'じゃなくても良い my $q2 = q(japanese2); warn Dumper $q2; # 変数は展開されない my $var = ' word'; my $q3 = q/japanese3.$var/; warn Dumper $q3; 1;
結果
# perl q_test.pl
$VAR1 = 'japanese1';
$VAR1 = 'japanese2';
$VAR1 = 'japanese3$var';
qq演算子
qq_test.pl(shebang、use省略)
# 基本 my $qq1 = q/english1/; warn Dumper $qq1; # 区切り文字はついであれば'/'じゃなくても良い my $qq2 = q[english2]; warn Dumper $qq2; # 変数は展開される my $var = ' word'; my $q3 = qq/japanese3$var/; warn Dumper $q3;
結果
# perl qq_test.pl
$VAR1 = 'english1';
$VAR1 = 'english2';
$VAR1 = 'japanese3 word';
qw演算子(shebang、use省略)
qw_test.pl(shebang、use省略)
# 基本 # 基本 print "######## test1 ########\n"; my @qw1 = qw/apple1 lemon1 meron1/; warn Dumper @qw1; # スカラーでは受け取れない print "######## test2 ########\n"; my $qw2 = qw/apple2 lemon2 meron2/; warn Dumper $qw2; # 区切り文字はついであれば'/'じゃなくても良い print "######## test2 ########\n"; my @qw3 = qw(apple3 lemon3 meron3); warn Dumper @qw3; # '[...]'で囲めばスカラーに print "######## test4 ########\n"; my $qw4 = [qw(apple4 lemon4 meron4)]; warn Dumper $qw4; # 変数は展開されない print "######## test5 ########\n"; my $string1 = 'grape'; my @qw5 = qw(apple5 lemon5 meron5 $string1); warn Dumper @qw5;
結果
# perl qw_test.pl
Useless use of a constant in void context at qw_test.pl line 13.
Useless use of a constant in void context at qw_test.pl line 13.
######## test1 ########
$VAR1 = 'apple1';
$VAR2 = 'lemon1';
$VAR3 = 'meron1';
######## test2 ########
$VAR1 = 'meron2';
######## test2 ########
$VAR1 = 'apple3';
$VAR2 = 'lemon3';
$VAR3 = 'meron3';
######## test4 ########
$VAR1 = [
'apple4',
'lemon4',
'meron4'
];
######## test5 ########
$VAR1 = 'apple5';
$VAR2 = 'lemon5';
$VAR3 = 'meron5';
$VAR4 = '$string1';