tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

q演算子、qq演算子、qw演算子、qr演算子をちょっと試す

はじめに

qw演算子とかってよく使うわりにちょくちょく調べちゃうのでちゃんと把握するためメモ

今回のきっかけはSQLAbstractのorder文の指定。
order_col => [qw/colA colB/]
こんなふーにも使えるので便利ですよね!

簡単な概要

q/string/;
シングルクォートで囲んだのと同じ。
'string'と同じで内部に変数を書いても展開しない

qq/string/;
ダブルクォートで囲んだのと同じ。
"string"と同じで内部に書いた変数を展開する

qw/string1 string2 string3/;
("string1", "string2", "string3")と同じ。
一覧の文字列を空白文字を区切りとして分割したリストを返す

qr/\.pl$/i;
文字列を正規表現として定義 (可能ならコンパイルする)

使用例

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';

qr演算子(shebang、use省略)

qr_test.pl

# 基本
my $qr1 = qr/\.pl$/i;
warn Dumper $qr1;

my $string = 'testtesttest.pl';
# 普通に文字列マッチ
warn $string =~ /\.+pl/;
# qr結果でマッチ
warn $string =~ $qr1;

結果

# perl qq_test.pl
$VAR1 = qr/(?i-xsm:\.pl$)/;
1 at qr_test.pl line 10.
1 at qr_test.pl line 11.

ちょこっとメモでした。