#amazon(4797336803)
#amazon(4873115671)
制御構文 (Control Statement) †
条件分岐 (Conditional Statement) †
if †
if (expr1){
command1
} elsif (expr2){
command2
} else {
command3
}
繰り返し (Loop Statement) †
for †
foreach †
while †
while (expr){
command
}
中断 †
終了 †
条件式 (Expression) †
文字、数値の条件式 †
論理結合 †
変数 (Variable) †
- 変数の宣言
- 「この変数を使いますよ」と明示すること
- Perl の場合、変数名、データ型、スコープを明示する
- グローバル スコープに限っては、宣言を省略することが出来る
- ただし、use strict を指定する場合は必ず宣言する必要がある
データ型 (Data Types) †
スカラー変数 (Scalar Variable) †
- 単一の文字列や数字を代入することが出来る
- 変数名は $var 形式
- $ の次の一文字は必ずアルファベット
- 記号は _ (Under score) のみ使用出来る
- 大文字と小文字は区別される
- ex) 変数の使用
host# cat sample.pl
#!/usr/bin/perl
$num = 10;
print "value is $num";
host# ./sample.pl
value is 10
- ex) 変数の後に文字が続く場合は { } で括る
host# cat sample.pl
#!/usr/bin/perl
our $num = 10;
print "value is ${num}cm";
host# ./sample.pl
value is 10cm
- ex) ' (Single quote) で括ると変数が展開されない
host# cat sample.pl
#!/usr/bin/perl
our $num = 10;
print 'value is $num';
host# ./sample.pl
value is $num
配列 (Array Variable) †
- 複数の文字列や数字を代入することが出来る
- 変数名は @var 形式
- @ の次の一文字は必ずアルファベット
- 記号は _ (Under score) のみ使用出来る
- 大文字と小文字は区別される
- 変数への代入 (単一)
$var[num] = value;
- 変数への代入 (複数)
@var = (value1, [value2...]);
@var = ("value1", ["value2"...]);
@var[num1, [num2...]] = ("value1", ["value2"...]);
- 文字列の場合、" (Double quote) か ' (Single quote) で括る
- 単一の要素を示すため、@ ではなく $ になる点に注意
- num
- 配列の末尾に追加
@var = (@var , value);
- 要素の個数をスカラー変数に代入する
$var2 = @var;
- ex)
host# cat sample.pl
#!/usr/bin/perl
use strict;
my @array;
my $num;
@array = ("AAA", "BBB", "CCC");
$num = @array;
print "@array\n"; すべて出力
print "@array[1]\n"; 特定の値を出力
print "$num\n"; 値の数を出力
foreach (@array) { 繰り返し処理ですべて出力
print "$_\n";
}
host# ./sample.pl
AAA BBB CCC
BBB
3
AAA
BBB
CCC
ハッシュ変数 (Hash Variable) †
- キーと値をペアとして代入した配列
- 配列と違い、要素の順序は意識しない
- 変数名は %var 形式
- % の次の一文字は必ずアルファベット
- 記号は _ (Under score) のみ使用出来る
- 大文字と小文字は区別される
多次元配列 (Multidimensional Array Variable) †
- 変数への代入 (複数)
@array = (
['A1', 'B1'[, 'C1'...]],
['A2', 'B2'[, 'C2'...]],
['A3', 'B3'[, 'C3'...]],
...
);
- ex)
host# cat sample.pl
#!/usr/bin/perl
use strict;
my @array = "";
@array = (
['A1', 'B1', 'C1'],
['A2', 'B2', 'C2'],
['A3', 'B3', 'C3'],
);
print "$array[0][0] $array[0][1] $array[0][2]\n";
print "$array[1][0] $array[1][1] $array[1][2]\n";
print "$array[2][0] $array[2][1] $array[2][2]\n";
foreach my $i (@array) { 繰り返し処理で出力
foreach my $j (@{$i}) {
print "$j\n";
}
}
host# ./sample.pl
A1 B1 C1
A2 B2 C2
A3 B3 C3
A1
B1
C1
A2
B2
C2
A3
B3
C3
多次元ハッシュ変数 (Multidimensional Hash Variable) †
- 変数への代入 (複数)
%hash = (
Raw1 => { ColA => "A1", ColB => "B1", ColC => "C1" },
Raw2 => { ColA => "A2", ColB => "B2", ColC => "C2" },
Raw3 => { ColA => "A3", ColB => "B3", ColC => "C3" },
);
スコープ †
グローバル変数 †
- スクリプト全体で使用可能な変数
- use strict を指定しない場合、宣言をしていない変数はグロバール変数になる
- use strict を指定する場合、必ず our で宣言する必要がある
- 変数の宣言と定義 (同時)
our $var = value;
- 変数の宣言と定義 (分割)
our $var;
$var = value;
ローカル変数 †
- 特定の部分に限定して使用可能な変数
- 局所化することが出来るため、同じ変数名を別の役割で使うことが出来る
- my 変数
- 宣言したスコープからのみ参照可能 (レキシカル スコープ)
- スコープ内のサブルーチンからも参照出来ない
- local 変数
- グローバル変数を、宣言したスコープ内で一時的に書き換える (ダイナミック スコープ)
- 宣言したスコープが終了すると元の値に戻る
- 宣言したスコープのサブルーチンからは参照可能
- my 変数の宣言と定義
my $var = value;
- local 変数の宣言と定義
local $var = value;
特殊変数 †
変数 | 説明 |
$_ | デフォルト変数 foreach の変数など、その構文内でデフォルトで入っているであろう値が入る |
@_ | サブルーチンの引数 |
関数 (Function) †
サブルーチン (Subroutine) †
- ユーザが定義する関数を Perl ではサブルーチンという
定義 †
sub subroutine {
command;
}
呼び出し †
- サブルーチンを呼び出す
&subroutine;
- 引数を付けて呼び出す
&subroutine(arg);
ライブラリ †
- 汎用的なサブルーチンをメイン スクリプトと独立したファイルに記述することが出来る
- サブルーチンが記述されたファイルをライブラリと呼ぶ
モジュール (Module) †
コマンド †
print †
- 標準出力に出力する
print "text"
- Python では " (Double quote) と ' (Single quote) は同じ
- 行末には改行が入る
- , (Comma) は改行しない
print "text1", "text2"
↓
text1 text2
print "text1",
print "text2"
↓
text1 text2
- 連結する
print "text1" + "text2"
↓
text1text2
- 繰り返し
print "text" * num
実行オプション †
スクリプト ファイルの実行 †
# perl [option] [script.pl]
オプション | 意味 | 説明 |
-e command | | ワンライナー |
-p | | コマンドを繰り返し実行し、結果を標準出力に出力する |
-n | | コマンドを繰り返し実行する |
-i filename | | 入力ファイルに上書き |
-iexp filename | | 入力ファイルに exp を付与したファイルに出力 |
ワン ライナー †
ファイルをバックアップした上で置換 †
# perl -i.`date '+%Y%m%d'` -pe 's/foo/bar/g' *
その他 †
ファイルを開く †
open (STR,"list.txt")
close STR;
置換 †
$string =~ s/\n//;