例 | 説明 |
12345 | 整数 |
123.45 | 小数 |
1.23E45 | 指数 |
0x12345 | 16進数 先頭に0xをつけると16進数となる |
012345 | 8進数 先頭に0をつけると8進数となる |
例 | 説明 |
"abc" | 文字列(abc)を表す |
'abc' | 文字列(abc)を表す |
"abc'def'ghi" | 文字列(abc'def'ghi)を表す ダブルクォーテーションの中ではシングルクォーテーションを使うことが出来る |
'abc"def"ghi' | 文字列(abc"def"ghi)を表す シングルクォーテーションの中ではダブルクォーテーションを使用することができる |
"abc\"def" | 文字列(abc"def)を表す どうしてもダブルクォーテーション中にダブルクォーテーションを使用したい時は、バックスラッシュ( \ )を用る |
例 | 説明 |
$xx = 7; print "答は$xxです\n"; | 「答は7です」と表示される |
$xx = 7; print '答は$xxです\n'; | 「答は$xxです\n」と表示されます |
例 | 説明 |
qq(abc) | 文字列「abc」を表す |
q(abc) | 文字列「abc」を表す |
qq(abc'def"ghi) | 文字列「abc'def"ghi」を表す qq( ) の中ではダブルクォーテーションとシングルクォーテーションの両方とも使うことが出来る |
q(abc'def"ghi) | 文字列「abc'ef"ghi」を表す q( ) の中ではダブルクォーテーションとシングルクォーテーションの両方とも使うことが出来る |
qq{abc} | qq( ) 以外にも qq{ }, qq[ ], qq| |, qq! ! 等が使える。 |
文字 | 説明 |
\t | タブ文字(\x09) |
\n | 改行(\x0a) |
\r | リターン(\x0d) |
\f | フォームフィード(\x0c) |
\b | バックスペース(\x08) |
\a | アラーム(\x07) |
\e | エスケープ文字(\x1b) |
\033 | 文字コード(8進数) |
\x1b | 文字コード(16進数) |
\c[ | コントロール文字 |
\l | 次の1文字を小文字にする |
\u | 次の1文字を大文字にする |
\L | \Eまでの文字列を小文字にする |
\U | \Eまでの文字列を大文字にする |
\E | \Lや\Uを終了させる |
\\ | ( \ )自身を表す |
\" | ダブルクォーテーション( " )自身を表す |
例 | 説明 |
$x = 3; | $が付いた名前はスカラ変数を表わす |
例 | 説明 |
@xa | @が付いた名前は配列を表わす |
@xa = (12,3,5); | 配列の要素にまとめて値を代入できる |
$xa[0] = 12; $xa[1] = 3; $xa[2] = 5; | 配列の要素は添え字で指定する 添え字は0から始まる 配列は@で表すが要素は$であることに注意 |
@xa = (); | 配列の初期化 () は空の配列を表わす |
$#xa | $#変数名 は、@変数名 の配列の最後の添え字(個数から1をひいたもの)を表わす。 配列の全ての要素に対して順番に処理するには次の例のようにする for($i = 0; $i <= $#xa; $i++) { print $xa[$i],"\n"; } 但し perl では for よりも foreach を使うほうが推奨されています。 制御構造 参照 foreach $x (@xa) { print $x,"\n"; } |
例 | 説明 |
%z | %が付いた名前は連想配列を表わす |
%z = ("abc" , "abcの値" , "de" , "deの値"); | 連想配列の要素にまとめて値を代入できる キー , 値 の順番に並べていく |
$z{"abc"} | キー "abc" で指定される要素の値 連想配列は%で表すが要素は$であることに注意 |
%z = (); | 連想配列の初期化 () は空の連想配列を表わす |
例 | 説明 |
$_ | デフォルト変数 変数を明示的に指定しないときはデフォルト変数が指定されたものとして処理される |
演算子 | 説明 |
+ | 加算を実行する 12 + 3 結果は 15 となる |
- | 減算を実行する 12 - 3 結果は 9 となる |
* | 乗算を実行する 12 * 3 結果は 36 となる |
/ | 除算を実行する 12 / 3 結果は 4 となる |
% | 剰余を実行する 13 % 3 結果は 1 となる |
** | 累乗を実行する 5**2 結果は 25 となる 5 の 2 乗 |
++ | インクリメント $i++ 結果 $i の値が 1 増加する 繰り返しのループでよく使う |
-- | デクリメント $i-- 結果 $i の値が 1 減少する 繰り返しのループでよく使う |
演算子 | 説明 |
== | 等しい |
!= | 等しくない |
< | 小さい |
> | 大きい |
<= | 以下 |
>= | 以上 |
<=> | 左辺と右辺を比較し次の3種類の値を返す 左辺が右辺より小さいとき -1 左辺が右辺と等しいとき 0 左辺が右辺より大きいとき 1 |
演算子 | 説明 |
eq | 等しい |
ne | 等しくない |
lt | 小さい |
gt | 大きい |
le | 以下 |
ge | 以上 |
cmp | 左辺と右辺を比較し次の3種類の値を返す 左辺が右辺より小さいとき -1 左辺が右辺と等しいとき 0 左辺が右辺より大きいとき 1 |
演算子 | 説明 |
and | 論理積 (&& とも書く) |
or | 論理和 (|| とも書く) |
not | 否定 (! とも書く) |
演算子 | 説明 |
. | "abc" . "def" 結果は "abcdef" となる |
演算子 | 説明 |
= | 代入に使用する(数値にも文字列にも使われる) |
+= | 追加(数値に使用する) $a = 13; $a += 5; $a の値は 18 となる |
.= | 追加(文字列に使用する) $b = "abc"; $b .= "de"; $b の値は "abcde" となる |
演算子 | 説明 |
.. | 繰り上がる値の配列を作る(繰り下がりは出来ない) 例1.文字列の場合 ("A" .. "D") は ("A", "B", "C", "D") と同じである ("A" .. "Z") は 大文字のアルファベットの配列である 例2.数値の場合 (1 .. 10) は 数値の 1 から 10 までの配列 |
構文 | if (条件式1) { 条件式1が真のときに実行する内容 } elsif (条件式2) { 条件式1が偽で条件式2が真のときに実行する内容 } else { 条件式1,2いずれも偽のときに実行する内容 } 注1) elsif は何個でも入れることが出来る。無くても良い。 注2) else は無くても良い |
構文 | 実行文 if (条件式); #条件式が真のときのみ実行文が実行される 注)if (条件式) の後ろに ";" があることに注意 後述する last や next と組み合わせてループの実行を制御するのにも使われる。 |
例 | print "OK\n" if($k == 1); この文は次のように書くのと同じ結果になる if($k == 1) { print "OK\n"; } |
構文 | 実行文 unless (条件式); #条件式が偽のときのみ実行文が実行される 注) unless (条件式) の後ろに ";" があることに注意 ifとは逆の働きをする。ただし、あまり使用されない。 |
例 | print "NG\n" unless($k == 1); この文は次のように書くのと同じ結果になる print "NG\n" if($k != 1); |
構文 | for (式1; 式2; 式3) { 繰り返す内容 } |
例1 | 1 + 2 + ... + 10 を計算する $sum = 0; for ($i=1; $i<=10; $i++) { $sum = $sum + $i; } 注)$sum = $sum + $i; と書く代わりに $sum += $i; としても同じ結果になる。 |
例2 | 配列の全要素を書き出す @a = ("abc", "ghi", "xyz"); for ($i=0; $i<=$#a; $i++) { print $a[$i], "\n"; } 注)配列の全要素に対して実行するには、次の foreach を使うことも出来る。 |
構文 | foreach 変数 (リスト) { 繰り返す内容 } |
例1 | 1 + 2 + ... + 10 を計算する(配列に代入してから行う) @a = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); $sum = 0; foreach $i ( @a ) { $sum = $sum + $i; } |
例2 | 1 + 2 + ... + 10 を計算する(2つの配列に代入してから行う) @a = (1, 2, 3, 4, 5, 6); @b = (7, 8, 9, 10); $sum = 0; foreach $i ( @a, @b ) { $sum = $sum + $i; } |
例3 | 1 + 2 + ... + 10 を計算する(配列に代入しないで行う) $sum = 0; foreach $i (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) { $sum = $sum + $i; } |
構文 | while (条件式) { 真のときに繰り返す内容 } |
構文 | until (条件式) { 偽のときに繰り返す内容 } |
構文 | do { 繰り返す内容 } while (条件式); 注)while (条件式)の後ろに ";" があることに注意 |
構文 | do { 繰り返す内容 } until (条件式); 注)until (条件式)の後ろに ";" があることに注意 |
構文 | while (条件式) { 真のときに繰り返す内容 next if (条件式2); 条件式2が真のときnext以降は実行しない } 注)next if (条件式2)の後ろに ";" があることに注意 |
構文 | while (条件式) { 真のときに繰り返す内容 last if (条件式2); 条件式2が真のときlast以降は実行せず、while ループを終了する } 注)last if (条件式2)の後ろに ";" があることに注意 |
構文 | AX1: while (条件式1) { AX2: while (条件式2) { 真のときに繰り返す内容 last AX1 if (条件式3); 条件式2が真のときlast以降は実行せず、内側のループだけでなく外側のwhile ループも終了する } } 注1)last if (条件式3)の後ろに ";" があることに注意 注2) ラベルをつけない場合は、last 文が属する最も内側のループを終了する。 |
例1 | 引数なし、戻り値なし、値の受け渡しはグローバル変数による $a = 3; #グローバル変数に代入 $b = 19; #グローバル変数に代入 text_prt1(); #サブルーチン呼び出し $a = 13; #グローバル変数に代入 $a = 12; #グローバル変数に代入 text_prt1(); #サブルーチン呼び出し exit; #メインルーチンの終わり sub text_prt1 { #サブルーチン開始 if(($a + $b) % 2 == 0) { print "$a + $b は偶数\n"; } else { print "$a + $b は奇数\n"; } return; } #サブルーチンの終わり 実行結果は次のようになる 3 + 19 は偶数 13 + 12 は奇数 注)特に指定しない場合、すべての変数はメインルーチンとサブルーチンのどちらでも共通に使用できるグローバル変数と言う。 |
例2 | 引数あり、戻り値なし text_prt2(3, 19); #サブルーチン呼び出し text_prt2(13, 12); #サブルーチン呼び出し exit; #メインルーチンの終わり sub text_prt2 { #サブルーチン開始 if(($_[0] + $_[1]) % 2 == 0) { print "$_[0] + $_[1] は偶数\n"; } else { print "$_[0] + $_[1] は奇数\n"; } return; } #サブルーチンの終わり 実行結果は例1と同じ 注)サブルーチン呼び出しのときにサブルーチン名の後の( )内に書いたものを引数(ひきすうと読む)と言い、サブルーチン内では、$_[0], $_[1], ... で参照する。 |
例3 | 引数あり、戻り値あり print text_prt3(3, 19); #サブルーチン呼び出し print text_prt3(13, 12); #サブルーチン呼び出し exit; #メインルーチンの終わり sub text_prt3 { #サブルーチン開始 if(($_[0] + $_[1]) % 2 == 0) { return ("$_[0] + $_[1] は偶数\n"); } else { return ("$_[0] + $_[1] は奇数\n"); } return; } #サブルーチンの終わり 実行結果は例1と同じ 注)return の後ろの ( ) 内に書いた値を 戻り値 と言い、呼び出されたときの値となる。 |
例4 | 引数あり、戻り値あり、ローカル変数を使用 print text_prt3(3, 19); #サブルーチン呼び出し print text_prt3(13, 12); #サブルーチン呼び出し exit; #メインルーチンの終わり sub text_prt3 { #サブルーチン開始 my ( $ab, $c ); #ローカル変数を宣言 $ab = $_[0] + $_[1]; if($ab % 2 == 0) { $c = "$_[0] + $_[1] は偶数\n"; } else { $c = "$_[0] + $_[1] は奇数\n"; } return($c); } #サブルーチンの終わり 実行結果は例1と同じ 注)サブルーチン内で my を使って変数を宣言すると、サブルーチン内だけで使える変数(ローカル変数)となる。 |
使用例 |
if($a =~ m/abc/ ) { パターンにマッチした時の実行文 }else{ パターンにマッチしなかった時の実行文 } |
使用例 |
if($a !~ m/abc/ ) { パターンにマッチしなかった時の実行文 }else{ パターンにマッチした時の実行文 } |
例 | 説明 |
VALUE =~ s|PATTERN|REPLASE|OPTION; | /の代わりに|を使用 |
VALUE =~ s!PATTERN!REPLASE!OPTION; | /の代わりに!を使用 |
VALUE =~ s(PATTERN)(REPLASE)OPTION; | /の代わりに()を使用 |
VALUE =~ s'PATTERN'REPLASE'OPTION; | シングルクォート'を使うと、置換文字列での展開がされない。 |
VALUE =~ s`PATTERN`REPLASE`OPTION; | バッククォート`を使うと、置換文字列をコマンドとして実行してその出力が置換文字列として使われる |
文字 | 働き |
g | 繰り返してマッチ |
i | 英字の大文字と小文字を区別しない |
m | 文字列を複数行として扱う |
o | PATTERNのコンパイル(変数をその値で置き換えること)を一回だけ行う |
s | ワイルドカードの.が改行にもマッチする |
x | 拡張正規表現を使用する |
文字 | 働き |
e | REPLASEをperlの式として評価してから置換 |
ee | REPLASEをperlの式として評価し実行後の戻り値を再度評価してから置換 |
g | 繰り返して置換 |
i | 英字の大文字と小文字を区別しない |
m | 文字列を複数行として扱う |
o | PATTERNのコンパイル(変数をその値で置き換えること)を一回だけ行う |
s | ワイルドカードの.が改行にもマッチする |
x | 拡張正規表現を使用する |
文字 | 働き |
\ | 直後の文字をエスケープする。メタ文字をリテラルとして使うときに使用 |
. | 任意の1文字にマッチする |
[ ] | [ ]の中の任意の1文字にマッチする 例1 [afk] :a,f,k のいずれか1文字 例2 [a-z0-9] :小文字または数字のうち任意の1文字 |
[^ ] | [^ ]の中の文字以外の1文字にマッチする 例1 [^afk] a,f,k 以外の1文字 例2 [^a-z0-9] 小文字または数字以外の任意の1文字 |
\d | 数字1文字 [0-9]と同じ |
\D | 数字以外の1文字 [^0-9]と同じ |
\w | アルファベットまたは数字1文字 [a-zA-Z0-9]と同じ |
\W | アルファベットと数字以外の1文字 [^a-zA-Z0-9]と同じ |
\s | 空白文字 [ \n\r\f\t]と同じ \nの前に1文字のスペースがあることに注意 |
\S | 空白文字以外 [^ \n\r\f\t]と同じ \nの前に1文字のスペースがあることに注意 |
\f | 改ページ(form feed) = \x0c |
\n | 改行(newline) = \x0a |
\r | 復帰文字(return) = \x0d |
\t | タブ(tab) = \x09 |
\e | エスケープ |
\a | アラーム |
\c | 制御文字 |
\S | 空白文字以外 [^ \n\r\f\t]と同じ \nの前に1文字のスペースがあることに注意 |
\0 | ヌル文字 |
\12 | 8進数で12の文字 |
\x12 | 16進数で12の文字 |
| | 選択一致パターン 例 ABC|DE|TY :ABCまたはDEまたはTYにマッチ |は何個でも並べることが出来る |
( ) | 文字列をグループ化する。 ( )内にマッチした文字列は記憶され、別の場所で参照できる。 |
(?: ) | 文字列をグループ化する。 ( )と違ってマッチした文字列は記憶されない。 |
\1または$1 | ( )でグループ化した文字列にマッチした文字列を参照する。 正規表現の中で参照するときは\1,\2,\3 ...を使う。 正規表現の外で参照するときは$1,$2,$3 ...を使う。 |
文字 | 働き |
x? | 0個または1個のxにマッチ |
x* | 0個以上のxにマッチ |
x+ | 1個以上のxにマッチ |
x{m,n} | m個以上n個以下のxにマッチ x{m} :m個のxにマッチ x{m,} :個以上のxにマッチ x{m,n}:m個以上n個以下のxにマッチ |
最短マッチ | 量指定子の後に?をつける x*? x+? x{m,n}? |
文字 | 働き |
^ | 行頭 |
$ | 行末 |
\A | 文字列の先頭 |
\b | ワードの区切り ワードとは英数字とアンダースコア(_)のこと |
\B | ワードの区切り以外 |
\G | 文字列の先頭、またはgオプションが付いたマッチングが終了した場所 |
\Z | 文字列の最後 |
コマンド | 働き |
open | ファイルを開く ファイル名abc.txt ファイルハンドル FILE1 とすると open(FILE1, "abc.txt"); ファイルを開く open(FILE1, "<", "abc.txt"); 読み込みモードで開く open(FILE1, ">", "abc.txt"); 書き込みモードで開く open(FILE1, ">>", "abc.txt"); 追加書き込みモードで開く |
close | ファイルを閉じる close(FILE1); |
ファイルに書き出す print OUT "abcde\n"; # abcde と書き出す print "abcde\n" # 画面に abcde と書き出す 注1)\nは改行を表す。 注2)ファイルハンドルを省略すると画面に出力する。 | |
printf | 書式を指定してファイルに書き出す printf OUT "%5d5d\n", 12, -20; # 5桁の整数として書き出す printf "%5d5d\n", 12, -20; # 画面に5桁の整数として書き出す 注1)書式指定は書式付の出力を参照。 注2)ファイルハンドルを省略すると画面に出力する。 |
読み込み | 読み込みは、ファイルハンドルを < > で囲み代入文の右辺におけばよい $a = <IN>; # 一行読み込んで $a に代入する 注1)ファイルハンドルを省略して <> とするとキーボードから読み込む。 |
使用例1 | 1行ずつ読み込んで画面に表示する open(IN, "<", "abc.txt"); while($line = <IN>) { print $line; } close(IN); |
使用例2 | 1行ずつ読み込んで、画面表示する(行頭と行末に*をつける) open(IN, "<", "abc.txt"); while($line = <IN>) { $line =~ s/\n//; print "*",$line,"*\n"; #行末の改行を削除 } close(IN); |
使用例3 | 配列に読み込む open(IN, "<", "abc.txt"); @lines= <IN>; close(IN); |
使用例4 | ファイルに書き出す open(OUT, ">", "abc.txt"); print OUT "1行目\n"; print OUT "2行目\n"; close(OUT); 注 行の終わりには必ず改行コード \n を書き出す |
例1 | STDIN を使って、プログラムを途中で止めることが出来る # ここにプログラムの最初に部分を書く print "Enter を押すと次に進みます\n"; <STDIN>; print "次に進みました\n"; # ここにプログラムの残りの部分を書く |
例2 | <STDIN> の代わりに <> を使っても同じことが出来る # ここにプログラムの最初に部分を書く print "Enter を押すと次に進みます\n"; <>; print "次に進みました\n"; # ここにプログラムの残りの部分を書く |
例 | プログラム $a = -12; $b = 120; print "------ ------\n"; printf "%d %d\n", $a, $b; #桁数指定なし printf "%6d %6d\n", $a, $b; #6桁ずつ右寄せ printf "%06d %06d\n", $a, $b; #6桁ずつで左に0を補う printf "%+6d %+6d\n", $a, $b; #6桁ずつ右寄せで正数には+を付ける printf "%-6d %-6d\n", $a, $b; #6桁ずつ左寄せ printf "%+-6d %+-6d\n", $a, $b; #6桁ずつ左寄せで正数には+を付ける 出力 ------ ------ -12 120 -12 120 -00012 000120 -12 +120 -12 120 -12 +120 |
例 | プログラム $a = 12.56; $b = 0.05; print "----+----+ ----+----+\n"; printf "%10.3f %10.3f\n", $a, $b; #10桁で小数点以下3桁右寄せ printf "%010.3f 010.3f\n", $a, $b; #10桁で小数点以下3桁右寄せで左に0を補う printf "%+010.3f %+010.3f\n", $a, $b; #10桁で小数点以下3桁右寄せで正数には+を付ける printf "%-10.3f %-10.3f\n", $a, $b; #10桁で小数点以下3桁で左寄せ printf "%+-10.3f %+-10.3f\n", $a, $b; #6桁ずつ左寄せで正数には+を付ける 出力 ----+----+ ----+----+ 12.560 0.050 000012.560 000000.050 +00012.560 +00000.050 12.560 0.050 +12.560 +0.050 |
例 | プログラム $a = 12.56; $b = 0.05; print "----+----+----+ ----+----+----+\n"; printf "%15.5e %15.5e\n", $a, $b; #15桁で小数点以下5桁右寄せ printf "%-15.5e %-15.5e\n", $a, $b; #15桁で小数点以下5桁で左寄せ printf "%+-15.5e %+-15.5e\n", $a, $b; #15桁ずつ左寄せで正数には+を付ける 出力 ----+----+----+ ----+----+----+ 1.25600e+001 5.00000e-002 1.25600e+001 5.00000e-002 +1.25600e+001 +5.00000e-002 注)書式指定の e を E に変えると、出力も E になる。 |
例 | プログラム $a = "abc"; $b = "zyxwv"; print "----+----+ ----+----+\n"; printf "%10s %10s\n", $a, $b; #10桁で右寄せ printf "%-10s %-10s\n", $a, $b; #10桁で左寄せ 出力 ----+----+ ----+----+ abc zyxwv abc zyxwv |
例 | プログラム $a = 163; print "----+\n"; printf "%5x\n", $a; #5桁で右寄せ printf "%05x\n", $a; #5桁で右寄せし先頭を0で埋める printf "%-5x\n", $a,; #5桁で左寄せ 出力 ----+ a3 000a3 a3 注)書式指定の x を X に変えると、出力も 大文字 になる。 |
例 | プログラム $a = 163; print "----+\n"; printf "%5o\n", $a; #5桁で右寄せ printf "%05o\n", $a; #5桁で右寄せし先頭を0で埋める printf "%-5o\n", $a,; #5桁で左寄せ 出力 ----+ 243 00243 243 注)書式指定の o を O に変えても、同じ出力になる。 |
例1 | プログラム $a = 65; printf "%c\n", $a; #1文字 出力 A 注)書式指定の c を C に変えると出力されない。 |
例2 | プログラム print "16進 10進 8進 文字\n"; for($i=0x41;$i<=0x5A;$i++) { printf "%02x %3d %03o %c\n", $i, $i, $i, $i; } 出力 16進 10進 8進 文字 41 65 101 A 42 66 102 B (途中省略) 59 89 131 Y 5a 90 132 Z |