はじめてのPerlプログラミング
仕事の都合により他人が作ったPerlプログラムを改修することになりましたが、Perlプログラムはやったことがありません。ということで仕事の前準備を兼ねてPerlプログラミングについてメモです。自分のためのメモが主用途ですので、今更プログラミングの基礎を書くつもりはなく、C言語か、その他の一つ以上プログラミング言語に精通している前提で進めています。C言語とPerlの大きな違いはコンパイル型かインタプリンタ型で大きく違いますが、そこらはとりあえずさて置きましょう。
Perlの基本的な文法は、
命令(引数);
命令(引数1,引数2,引数3);
命令文1;命令文2;
基本的にC言語と同じ形式ですね。「;」が処理区分になっていますので、「;」の前に改行があろうが、同じ行に「;」が複数あろうが構いません。Perlで命令文といわれる各機能関数はC言語とは違い、括弧でくくるのではなく、空白で区切ります。その点はC言語とはかなり違い、BASICに似ているように感じますね。
例:
print "文字列";
print '文字列';
文字列は基本的に「"」(ダブルクォーテーション)または「'」(シングルクォーテーション)で囲みますが、「"」と「'」の扱いの違いが厳格なC言語とは違い曖昧な気がします。
型が厳格なC言語とは違い、以下のような書き方もOKなようです。
print "文字列1", "文字列2", "文字列3";
※自由すぎると紛らわしくなるんだけどな。
コメントは「#」をつけます、
C++の「//」と同じような扱いのようですが、ひとつだけ例外があります。Perlプログラムの先頭行に、Perlがインストールされている環境設定は必要です。これはコメントではありません。Perlのお約束というものです。
例:
#!/usr/local/bin/perl
文字列データは、
文字列を「"」または「'」で囲んだものです。「'」で囲んだ場合には、改行に使う「\n」などのメタ文字が通常の文字として出力されるようです、面白い仕様です。メタ文字を出力させたいがために決めたのでしょうかね。ある意味、円マーク(バックスラッシュ)をやたら使うC言語より分かりやすい仕様なのかもしれません。
数値データは、
実数、整数、少数などを区別なく、数字のデータは数値データとして扱います。ただし、数字を「"」で囲んだものは数値の形をした文字列データになります。まあ、当たり前ですが。
配列(リスト)、
PerlではC言語の配列の概念をリストと呼ぶみたいです。ただし、データの型が曖昧でスカラーと言い数値型と文字列型が混在しても問題ないようです。むしろ、データの型が分からないと意図しない結果を招くプログラムにならないか心配です。
例:
(1,2,3,"123")
※C言語の波括弧「{}」はPerlではただの括弧で使われるみたいです。
スカラー変数
C言語のように変数の方宣言が存在せず、先頭が「$」文字で始まる文字列は変数として扱われます。
配列変数
スカラー変数の配列型の変数です、先頭が「@」文字で始まる文字列は変数として扱われます。
例:
@array → @array[0]
※宣言時にデータサイズを決めないこと以外はほぼC言語と同じようにアクセスします。
連想配列
別名ハッシュといい、文字列を配列のインデックスとする配列です。C言語にはない概念ですので、説明が困難ですので、使う予定はありませんので、説明を省かせていただきます。
ちなみに、連想配列名は「%」文字でで始まります。
例:
%array → $array{'みかん'}
※良く訳のわからんアクセス方式ですね。
代入文
変数に値を入れたいときには、「変数 = 値;」のようにC言語と同じように書きます。
例:
$x = 1; # 変数$xに数値データ「1」を代入
$y = "Hello!\n"; # 変数$yに文字列データを「"Hello!\n"」代入
$z = $x; # 変数$xに数値データ $x の値を代入
※初期化されていない変数には、undefという値が入っています。
四則演算(加算、減算、乗算、除算、剰余算)
+(加算演算子) 1+2+3、$x+$y+1
-(減算演算子) 1-2-3、$x-$y-1
*(乗算演算子) 1*2*3、$x*$y*2
**(べき乗算演算子)2**3、 $x**$y
/(除算演算子) 1/2/3、$x/$y/2
%(剰余算演算子) 7%3、 $x%3
※べき乗算演算以外はC言語と同じですね。
文字列の連結
「.」(ドット)で2つの文字列データをつなぎます。
"SATORI "."Baka" → "SATORI Baka"のデータになります。
基本的には、四則演算は数値データに、連結は文字列データに適用されるのですが、Perlでは数値データに対して連結をしたり、文字列データに四則演算を適用したりすることが可能です。もはやわけが分かりません。むしろ、バグを誘ってるんでしょうか?
例:
$x = 123;
$y = 45;
print $x . $y; # 12345と表示されます
例:
print "12345"*1,"\n"; # 12345と表示される
例:
print "SATORI"*1,"\n"; # 0と表示される
例:
$name = $first_name . " " . $last_name;
# 2つの変数の値を空白文字をはさんで連結して代入、これは便利ですね。
変数の扱いにくせがある事以外は、プログラムそのものはC言語とさほど変らない。
例:偶数奇数を判定する
$x = 10; # 判定する数字
if ( $x % 2 == 1 ) {
print "$xは奇数です。\n";
} else {
print "$xは偶数です。\n";
};
※C言語の「else if」は、Perlでは「elsif」である。
Perlの最大特徴というのは何より文字列操作である。その時に力を発揮するのは、
正規表現
正規表現についてはまた今度にまとめるとしよう。
※本記事は以下のサイトを参考にしております。
記事作成:2018.10.15