はじめての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の最大特徴というのは何より文字列操作である。その時に力を発揮するのは、

正規表現

正規表現についてはまた今度にまとめるとしよう。


※本記事は以下のサイトを参考にしております。

Perlプログラミング講座

Perlは文字列の操作に優れた言語です。文字列の検索、置換などの操作が基本的な命令として準備されています。特定の文字列を検索することができます。検索する対象は$_という変数です。つまり、検索したい対象となる文字列をあらかじめ変数$_に代入してから検索することになります。検索するときには、マッチ演算子(「m//」または「//」)を用います。マッチ演算子は次の形をしています。パターンは検索する文字列です。文字列または変数または正規表現のいずれかで指定します。修飾子は検索方法を指定します。必要のない場合には省略できます。マッチ演算子で得られる結果は、検索が成功した場合は真、失敗した場合は偽になります。このプログラムを実行すると「真」が表示されます。helloを検索するように変更した場合には、「偽」が表示されます。特定の文字列を検索し、検索した文字列を置換することができます。置換するときには、置換演算子(「s///」)を用います。置換演算子は次の形をしています。パターンは検索する文字列です。文字列または変数または正規表現のいずれかで指定します。置換する文字列は、検索して一致した文字列に対して置換する文字列を指定します。修飾子は置換方法を指定します。一致するものすべてを見つける場合には、「g」を指定してください。必要のない場合には省略できます。置換演算子で得られる結果は、置換した回数です。検索が失敗した場合は偽になります。$_を使わずに置換したい場合には、=~を用います。文字の入れ替えをする場合には、s///演算子ではうまくできません。このような場合には、変換演算子(「tr///」または「y///」)を用います。変換演算子は次の形をしています。リストで指定した変換対象となる文字を対応する変換する文字で置き換えます。修飾子は変換方法を指定します。必要のない場合には省略できます。正規表現を用いるとさらに高度な文字列の検索や置換が行えます。

www.tokiwa.ac.jp

記事作成:2018.10.15

記事更新:2018.10.15


SATORI's Music BAR

音楽全般に関して未経験者である僕が音楽活動で独自の音楽世界を創り上げる過程を綴ります

0コメント

  • 1000 / 1000