10分で学ぶPerl
Perlは、強力な高水準プログラミング言語で、テキスト処理能力と柔軟性で知られています。元々はシステム管理タスクのために開発されましたが、PerlはWeb開発、ネットワークプログラミングなどに使用される多目的な言語へと進化しました。このチュートリアルでは、Perlの核となる概念をカバーして、言語を素早く学べるようにします。
1. 最初のPerlプログラムを書く
シンプルなプログラムから始めましょう。hello.plというファイルを作成し、以下のコードを入力してください:
#!/usr/bin/perl
print "Hello, World!\n";
ファイルを保存し、ターミナルで以下のコマンドを実行します:
perl hello.pl
出力は以下のようになります:
Hello, World!
このシンプルなプログラムは、Perlの基本的な出力機能を示しています。print関数は、コンソールにテキスト情報を表示するために使用されます。
2. 基本構文
Perlの構文は柔軟で表現力豊かで、いくつかの特徴的な機能があります。
# これはコメントです
print "Hello, World!\n";
Perlの基本構文ルール:
- コメント: 一行コメントは
#で始まります - 文: セミコロン
;で終わります - シバン行: スクリプトファイルの先頭に
#!/usr/bin/perlを記述 - 変数: 変数の型を示す特別な文字を使用(
$、@、%) - 文字列引用符: シングルクォート
'またはダブルクォート"を使用できます
3. 変数とデータ型
Perlでは、変数は動的に型付けされ、型を示す特別な文字を使用します。
スカラー変数(単一の値):
$name = "Alice";
$age = 25;
$temperature = 36.5;
$is_active = 1; # 真の場合は1、偽の場合は空文字列
配列変数(順序付きリスト):
@fruits = ("apple", "banana", "cherry");
@numbers = (1, 2, 3, 4, 5);
ハッシュ変数(キーと値のペア):
%person = (
"name" => "John",
"age" => 30,
"city" => "New York"
);
3.1 スカラー変数
スカラーは文字列、数値、または参照などの単一の値を保持します。
# 文字列操作
$text = "Perl Programming";
print length($text); # 文字列の長さ
print uc($text); # 大文字に変換
print lc($text); # 小文字に変換
print substr($text, 0, 4); # 部分文字列を抽出
# 数値操作
$x = 10;
$y = 3;
print $x + $y; # 13
print $x - $y; # 7
print $x * $y; # 30
print $x / $y; # 3.333...
print $x % $y; # 1 (剰余)
3.2 配列変数
配列は複数の値を保持できる順序付きコレクションです。
@colors = ("red", "green", "blue");
# 配列要素へのアクセス
print $colors[0]; # "red"(単一要素には$を使用)
print $colors[1]; # "green"
print $colors[-1]; # "blue"(最後の要素)
# 配列操作
push(@colors, "yellow"); # 末尾に追加
pop(@colors); # 末尾から削除
shift(@colors); # 先頭から削除
unshift(@colors, "purple"); # 先頭に追加
# 配列関数
print scalar(@colors); # 要素数
print $#colors; # 最後のインデックス
3.3 ハッシュ変数
ハッシュはキーと値のペアのコレクションです。
%student = (
name => "Alice",
age => 20,
major => "Computer Science"
);
# ハッシュ要素へのアクセス
print $student{"name"}; # "Alice"
print $student{age}; # 20
# ハッシュ操作
$student{"gpa"} = 3.8; # 新しいキーと値のペアを追加
delete $student{"age"}; # キーと値のペアを削除
# ハッシュ関数
@keys = keys %student; # すべてのキーを取得
@values = values %student; # すべての値を取得
4. 制御フロー
Perlはプログラムの実行を管理するためのいくつかの制御フローステートメントを提供します。
4.1 if文
if文は条件を評価し、条件が真の場合にそのブロックを実行します。
$age = 20;
if ($age >= 18) {
print "Adult\n";
} elsif ($age >= 13) {
print "Teen\n";
} else {
print "Child\n";
}
# 一行のif
print "Adult\n" if $age >= 18;
4.2 unless文
unlessはifの反対で、条件が偽の場合に実行します。
$age = 15;
unless ($age >= 18) {
print "Not an adult\n";
}
# 一行のunless
print "Not an adult\n" unless $age >= 18;
4.3 ループ
Perlは様々なループ構造をサポートしています。
whileループ:
$count = 0;
while ($count < 5) {
print "Count: $count\n";
$count++;
}
forループ:
for ($i = 0; $i < 5; $i++) {
print "i = $i\n";
}
foreachループ:
@fruits = ("apple", "banana", "cherry");
foreach $fruit (@fruits) {
print "Fruit: $fruit\n";
}
# デフォルト変数$_を使用
foreach (@fruits) {
print "Fruit: $_\n";
}
lastとnext:
foreach (1..10) {
last if $_ == 5; # ループを終了
next if $_ % 2 == 0; # 偶数をスキップ
print "$_\n"; # 出力: 1, 3
}
5. サブルーチン
Perlのサブルーチンはsubキーワードを使用して定義されます。
基本的なサブルーチン定義:
sub greet {
my $name = shift;
return "Hello, $name!";
}
# サブルーチンの呼び出し
$message = greet("John");
print $message;
パラメータの使用:
sub add_numbers {
my ($a, $b) = @_;
return $a + $b;
}
$result = add_numbers(5, 3);
print "Sum: $result\n";
デフォルトパラメータ:
sub greet {
my ($name, $greeting) = @_;
$greeting = "Hello" unless defined $greeting;
return "$greeting, $name!";
}
print greet("Alice"); # "Hello, Alice!"
print greet("Bob", "Hi"); # "Hi, Bob!"
6. 正規表現
Perlは強力な正規表現機能で有名です。
基本的なパターンマッチング:
$text = "Hello, World!";
if ($text =~ /Hello/) {
print "Found 'Hello'\n";
}
# 大文字小文字を区別しないマッチング
if ($text =~ /world/i) {
print "Found 'world' (case-insensitive)\n";
}
置換:
$text = "I like cats and cats are cute";
$text =~ s/cats/dogs/g; # すべての出現を置換
print "$text\n"; # "I like dogs and dogs are cute"
マッチの抽出:
$email = "[email protected]";
if ($email =~ /(\w+)@(\w+\.\w+)/) {
print "Username: $1\n"; # "user"
print "Domain: $2\n"; # "example.com"
}
7. ファイル操作
Perlはファイルの読み書きのためのシンプルな方法を提供します。
ファイルの読み込み:
# ファイル全体を読み込む
open(my $fh, '<', 'example.txt') or die "Cannot open file: $!";
my $content = do { local $/; <$fh> };
close($fh);
print $content;
# 一行ずつ読み込む
open(my $fh, '<', 'example.txt') or die "Cannot open file: $!";
while (my $line = <$fh>) {
print $line;
}
close($fh);
ファイルへの書き込み:
# ファイルに書き込む
open(my $fh, '>', 'output.txt') or die "Cannot open file: $!";
print $fh "Hello, Perl!\n";
close($fh);
# ファイルに追記する
open(my $fh, '>>', 'output.txt') or die "Cannot open file: $!";
print $fh "Appending new content.\n";
close($fh);
8. 組み込み関数
Perlには多くの便利な組み込み関数が付属しています。
文字列関数:
$text = " Perl Programming ";
print length($text); # 文字列の長さ
print uc($text); # 大文字に変換
print lc($text); # 小文字に変換
print substr($text, 0, 4); # 部分文字列を抽出
print index($text, "Prog"); # 部分文字列の位置を検索
配列関数:
@numbers = (3, 1, 4, 1, 5, 9, 2);
print join(", ", sort @numbers); # "1, 1, 2, 3, 4, 5, 9"
print join(", ", reverse @numbers); # "2, 9, 5, 1, 4, 1, 3"
# 配列のフィルタリング
@filtered = grep { $_ > 3 } @numbers;
print join(", ", @filtered); # "4, 5, 9"
# 配列の変換
@doubled = map { $_ * 2 } @numbers;
print join(", ", @doubled); # "6, 2, 8, 2, 10, 18, 4"
ハッシュ関数:
%person = (name => "Alice", age => 25, city => "New York");
@keys = keys %person; # すべてのキーを取得
@values = values %person; # すべての値を取得
# キーが存在するかチェック
if (exists $person{age}) {
print "Age exists\n";
}
9. Perlモジュール
PerlにはCPANを通じて利用可能な豊富なモジュールエコシステムがあります。
コアモジュールの使用:
use strict;
use warnings;
use Data::Dumper;
%data = (name => "Bob", age => 30);
print Dumper(\%data); # データ構造を整形して表示
CPANモジュールのインストールと使用:
# CPANからモジュールをインストール
cpan install JSON
use JSON;
# JSONの解析
$json_string = '{"name": "Alice", "age": 25}';
$person = decode_json($json_string);
print $person->{name}; # "Alice"
# JSONの生成
$person_hash = { name => "Bob", age => 30 };
$json_output = encode_json($person_hash);
print $json_output; # {"name":"Bob","age":30}
10. Perlスタイルガイド
Perlには、クリーンで読みやすいコードを促進するコミュニティの慣習があります。
インデント: インデントには4つのスペースを使用します。
変数命名:
- 説明的な名前を使用する
- snake_caseの規則に従う
- 意味のある変数名を使用する
コード構成:
- スクリプトの先頭で
use strict;とuse warnings;を使用する - スコープを制限するために
myで変数を宣言する - 意味のあるサブルーチン名を使用する
ドキュメント:
- コードのドキュメント化にはPOD(Plain Old Documentation)を使用する
- 複雑なロジックにはコメントを含める
Perlの柔軟性と強力なテキスト処理能力は、システム管理、Web開発、データ処理タスクに優れた選択肢となります。豊富なモジュールエコシステムと強力なコミュニティサポートにより、現代のプログラミング環境でも関連性を保ち続けています。
