Perlのプログラミングや利用方法を基本的を中心に情報提供しています
演算子
演算子には代入演算子・算術演算子・数値比較演算子・文字列演算子・論理演算子・置換演算子などがあります。
文字列に関する演算子
文字列連結演算子「.」を使うと文字列を連結することができます。
# 文字列連結演算子「.」
my $str1 = 'ABC';
my $str2 = 'DEF';
my $str3 = $str1.$str2;
print $str3; # ABCDEF
my $str1 = 'ABC';
my $str2 = 'DEF';
my $str3 = "$str1$str2";
print $str3; # ABCDEF
#特殊な代入演算子
my $str1 = 'ABC';
$str1 .= 'DEF';
print $str1; # ABCDEF
文字列リスト演算子 - qw()
# qw(文字列1 文字列2 文字列3)
my @strings = qw/cat dog mouse/;
my @strings = ('cat', 'dog', 'mouse');
my $str3 = $str1.$str2;
繰り返し演算子「x」
# 文字列を繰り返し連結
my $str = 'abc' x 3;
print $str; # abcabcabc
# 配列を繰り返し連結
my @nums = (1, 2, 3) x 3;
print @nums #(1, 2, 3, 1, 2, 3, 1, 2, 3)
比較演算子
Perlの比較演算子には、数値での比較と文字列での比較を行うものに分けられます。比較演算子は、二つの値の大小について比較する演算子です。
数値比較
演算子 | 意味 |
A == B | AとBは等しい |
A != B | AとBは等しくない |
A > B | AはBより大きい |
A >= B | AはBより大きいか等しい |
A < B | AはBより小さい |
A <= B | AはBより小さいか等しい |
# if文条件で使う サンプル
# 数値比較演算子
my $num1 = 200;
my $num2 = 100;
if ($num1 > $num2) {
print "$num1の方が大きい";
}
# 論理演算子
# $num1は1~5までの範囲か比較
if ($num1 >= 1 && $num1 <= 5) {
#1以上...5以下
}
文字列比較
演算子 | 意味 |
A eq B | AとBは等しい |
A ne B | AとBは等しくない |
A gt B | AはBより大きい |
A ge B | AはBより大きいか等しい |
A lt B | AはBより小さい |
A le B | AはBより小さいか等しい |
cmp | 比較(※) |
※左側にあるものの方が大きいときに1、等しいときに0、右側にあるものの方が大きいときに-1を返します。
# if文条件で使う サンプル
# 文字列比較演算子
my $str = "東京";
if ($str ne "神奈川") {
print "神奈川ではありません¥n";
}
置換演算子
構文 | 内容 |
s/パターン/置換文字列/ | 「パターン」にマッチする文字列を「置換文字列」に置き換え。PATTERNは正規表現です。 |
# s/PATTERN/STRING/
$str = "I am a boy.";
$str =~ s/boy/girl/;
print $str;
> I am a girl.
置換演算子は、左辺を省略することもできます。この場合、左辺は 特殊変数 $_ が充てられます。
$_ = "I am a boy.";
s/boy/girl/;
print "$_\n";
> I am a girl.
置換演算子には、次の修飾子オプションが用意されています。
修飾子 | 内容 |
g | 繰り返しマッチする (global) |
i | 大文字と小文字の区別をしない (case-insensitive) |
m | 文字列を複数行として扱う (multi-line) |
o | 変数展開を1度だけ行う (only once) |
s | 文字列を単一行として扱う (single line) |
x | 拡張正規表現を行う (extended) |
e | 置換文字列を「式」と見なす (evaluation) |
$str = 'aaaa';
$str =~ s/a/B/;
print "$str\n";
> Baaa
#繰り返しマッチする
$str = 'aaaa';
$str =~ s/a/B/g;
print "$str\n";
> BBBB
変換演算子
変換演算子は文字列を1文字ずつ順にスキャンして、対象文字列に含まれるすべての文字を変換して、変換した文字数を返す演算子です
構文 | 内容 |
tr/変換対象の文字/変換後の文字/ | 「変換対象の文字」をスキャンして「変換後の文字」にすべて変換する |
y/変換対象の文字/変換後の文字/ | 同上 |
#大文字に変換する
$str = 'apple';
$str =~ tr/a-z/A-Z/;
print "$str\n";
> APPLE
#文字の個数を数える
$str = 'apple';
$count = $str =~ tr/a-z/A-Z/;
print "$count\n";
> 5
変換演算子にも修飾子が次のとおり用意されています。
修飾子 | 内容 |
c | 対象の文字に含まれないものを変換する |
d | 変換する文字に含まれないものを削除する |
s | 変換の結果、同じ文字が連続したものを1文字とする |
# c修飾子
$str = 'Language Japan';
$str =~ tr/A-Z/|/c; # 大文字以外を | に変換
print "$str\n";
> L||||||| J||||
# d修飾子
$str = 'Language Japan';
$str =~ tr/a-z//d; # 小文字を削除
print "$str\n";
> L J
# s修飾子
$str = 'pineapple';
# 大文字に変換し、連続した同一文字を1文字に変換
$str =~ tr/a-z/A-Z/s;
print "$str\n";
> PINEAPLE