変数とは、情報を入れる箱のようなものです。たとえば、
とあると、変数$ageに18という値が入れられることになります。 ここで使われている「=」は代入演算子と呼ばれ、数学での「両辺の値が等しい」という意味ではなく、「右辺の値を左辺に代入する」という意味です。ほかのプログラム言語でも同じですので注意してください。また、末尾に「;」をつけている点も忘れないでください。
変数には数字だけでなく、文字列も入れることができます。たとえば、
とすると、変数$addressに「千葉市稲毛区」という文字列が入れられます。
C言語では変数を使う前に、あらかじめ変数の宣言をしなければなりません。たとえば、下記のプログラムでは、int型の「age」という変数を宣言しています。宣言と同時に「18」という数字を代入しています。
#include <stdio.h>
int main(void)
{
char name[] = "環境 花子";
int age = 18;
char address[] = "千葉市稲毛区";
printf("私の名前は %s です。\n", name);
printf("私の年齢は %d です。\n", age);
printf("私の住所は %s です。\n", address);
return 0;
}
ですが、Perlでは「int」のような型を指定する必要もなく、また事前に宣言する必要もなく、使いたいときに自由に使えます。
演習2-1
下記のスクリプトのうち、「環境 花子」、「18」、 「千葉市稲毛区」を自分の情報に書き換えてkadai2-1.plとして保存し、正しく実行されるか確認せよ。
#!/usr/bin/perl $name = '環境 花子'; $age = 18; $address = '千葉市稲毛区'; print "私の名前は $name です。\n"; print "私の年齢は $age 才です。\n"; print "私の住所は $address です。\n";
(実行結果) 私の名前は 環境 花子 です。 私の年齢は 18 才です。 私の住所は 千葉市稲毛区 です。
足し算(加算)、引き算(減算)、掛け算(乗算)、割り算(除算)に関しては、C言語と同じように実行できます。
下記のスクリプトをkadai2-2.plとして保存し、実行結果を確認せよ。
#!/usr/bin/perl
$age = 18;
print "私の年齢は $age 才です。\n";
$tmp = $age - 5;
print "私の5年前の年齢は $tmp 才です。\n";
$tmp = $age + 30;
print "私の30年後の年齢は $tmp 才です。\n";
$age++;
print "私の来年の年齢は $age 才です。\n";
print 364/7, "\n";
print 365/7, "\n";
printf("%5.2lf\n",365/7);
print 365%7, "\n";
print int(365/7), "\n";
print 3**2, "\n";
print -3**2, "\n";
(実行結果) 私の年齢は 18 才です。 私の5年前の年齢は 13 才です。 私の30年後の年齢は 48 才です。 私の来年の年齢は 19 才です。 52 52.1428571428571 52.14 1 52 9 -9
文字列と文字列を連結させたい場合には . (ピリオド)を使います。
演習2-3
下記の左側のスクリプトをkadai2-3.plとして保存し、実行結果を確認せよ。
#!/usr/bin/perl $univ = '東京情報大学' . '総合情報学部'; print $univ, "\n"; $univ = '東京情報大学' . ' ' . '総合情報学部'; print $univ, "\n"; $x = 123; $y = 456; print $x + $y, "\n"; print $x . $y, "\n";
(実行結果) 東京情報大学総合情報学部 東京情報大学 総合情報学部 579 123456
indexを使うと、探したい部分文字列が、 大きな文字列の中のどこに含まれるか教えてくれます。たとえば、
ですと、先頭の文字を0番目として数えた6番目の位置に、 探したい文字列「Joho」があると教えてくれます。
上記の例では、「情報」という文字列は先頭を0番目とすると 2番目に現れますが、日本語の場合1文字は 2バイトで表現されていますので、その2倍の 4番目に来ると表示しますので注意が必要です。
上記の例では、「情報」という文字列は2箇所にあります。 indexが最初に見つけた位置を教えてくれるのに対して、 rindexは最後に見つけた位置を教えてくれるので、使い分けることができます。
ある文字列の中から、特定の文字列を取り出したい場合には substrを使います。
とすることで、変数に取り出したい特定の文字列が入れられます。 下記の例を見てください。
substrにはいくつか異なる使い方があります。はじめに、
と、「取り出したい長さ」を省略することで、変数には 取り出したい位置から残り全ての文字列が入れられます。 下記の例を見てください。
substrを使って、特定の文字列を別の文字列に 置き換えることもできます。
と、substrの基本型に「置き換える文字列」を追加するだけの話です。これにより元の文字列は新しい文字列で置き換えられています。下記の例を見てください。
このsubstrで文字列の置換を行う場合、
という欠点があります。ですので、次に紹介する s//が一般的に使用されます。
演習2-4
下記の左側のスクリプトをkadai2-4.plとして保存し、 実行結果を確認せよ。実行結果は上記の例と同じなので省略する。
#!/usr/bin/perl $univ = '東京情報大学総合情報学部'; $tmp = substr($univ, 4, 4); print $tmp, "\n"; $univ = '東京情報大学総合情報学部'; $tmp = substr($univ, 4); print $tmp, "\n"; $univ = '東京情報大学総合情報学部'; $tmp = substr($univ, 4, 4, '農業'); print $univ, "\n"; print $tmp, "\n";
substrで、ある文字列の中から特定の文字列を 別の文字列に置き換えたい場合には、その特定の文字列の位置を 指定する必要があります。しかし、s//では文字列の位置の指定の必要なく、別の文字列に置き換えてくれます。
とします。このs/ / /は、様々な修飾子とよばれる オプションを組み合わせることで強力に機能してくれます。 詳しくは正規表現のページに譲りますが、 ここでは下記の演習例を実習してみてください。
演習2-5
下記のスクリプトをkadai2-5.plとして保存し、実行結果を確認せよ。
#!/usr/bin/perl $univ = '東京情報大学総合情報学部'; $univ =~ s/情報/農業/; print $univ, "\n"; $univ = '東京情報大学総合情報学部'; $univ =~ s/情報/農業/g; print $univ, "\n"; $name = 'Tokyo tokyo TOKYO'; $name =~ s/tokyo/TOKYO/; print $name, "\n"; $name = 'Tokyo tokyo TOKYO'; $name =~ s/tokyo/TOKYO/i; print $name, "\n"; $name = 'Tokyo tokyo TOKYO'; $name =~ s/tokyo/TOKYO/ig; print $name, "\n";
(実行結果) 東京農業大学総合情報学部 東京農業大学総合農業学部 Tokyo TOKYO TOKYO TOKYO tokyo TOKYO TOKYO TOKYO TOKYO