0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

perlの文法健忘録

0
Last updated at Posted at 2026-05-05

はじめに

perlでスクリプトを書く際に調べたことを健忘録としてまとめます。

  • perlの実行方法
  • 引数
  • ファイルの入出力
  • エラー処理
  • 文字列操作
    など

目次

perlの実行方法

perl スクリプト名.pl [引数...]

スクリプト名の取得

$0にスクリプト名が格納される

print "$0\n";

コマンドライン引数

コマンドライン引数は@ARGV配列に格納される。

例)引数の取り出し

my $arg1 = $ARGV[0];
my $arg2 = $ARGV[1];

引数の個数のチェック

  • 配列を数値(スカラー)として評価すると、その要素数を返す。文脈(スカラコンテキスト)
  • die関数はメッセージを出力しPerlスクリプトを終了する。
if (@ARGV < 2) {
    die "引数が2つありません\n";
}

変数と配列の宣言

$var #変数
@var #配列

グローバル変数

my $var #変数
our $var #変数 # グローバル変数

ファイルの入力-open関数

ファイルの入力はopen関数を使用する。

書式

open(ファイルハンドル, モード, ファイル)
  • ファイルハンドル
    ファイルを扱う変数
  • モード
    読み込み専用など
  • ファイル
    入力ファイル

例)data.datを取り出す

open(my $fh_data,  '<', "data.dat");

ファイルの入力のエラー処理

エラー処理はorとdieを組み合わせたor dieを使用する。

例)エラー処理

open(my $fh_data,  '<', "data.dat")  or die "'data.dat' を開けませんでした: $!";
  • or
    処理が成功(真)なら右側は無視し、失敗(偽)なら実行する

  • $!
    OSからのエラーメッセージが格納される特殊変数
    ファイルがない場合:No such file or directory
    権限がない場合:Permission deniedなど

ファイルを一行ずつ取り出して処理する

  • while文を使用する
  • <ファイルハンドル>とすると一行読み込む
  • ファイルの終端(EOF)でwhile文が終了する。
while (my $data_line = <$fh_data>) {
    print $data_line
}

ファイルを閉じる-close関数

  • ファイルを閉じるにはclose関数を使用する。
  • open関数で作成したファイルハンドルを指定する。

例)

close($fh_data);

ファイルの出力-open関数

open関数の出力モードにすることで、ファイルの出力をする。

例)カンマ区切りのデータを作成する

open(my $fh, '>', 'data.dat') or die("error :$!");

binmode($fh); # バイナリモードに設定

print $fh "1aaa,bbb,123,date\n";
print $fh "2aaa,\"a,b,c\",123,date\n";
print $fh "3aaa,b',123,date\n";
print $fh "4a\0a,b,123,date\n";
print $fh "5aaa,,123,date\n";

文字列操作

文字列の連結-ドット演算子 (.) 変数展開 join関数

例)ドット演算子 (.)

my $str1 = "aaa";
my $str2 = "20240520";
my $ext3  = ".txt";

my $filename = $str1 . "_" . $str2 . $str3; # aaa_bbb.sql

例)変数展開(ダブルクォート内)

my $str1 = "aaa";
my $str2 = "20240520";
my $ext3  = ".txt";
my $filename = "${str1}_${str2}.${str3}";

例)join関数

my @parts = ("aaa", "20240520", "txt");
my $filename = join("_", @parts); # aaa_20240520_txt

末尾の改行を削除するchomp関数

末尾の改行を削除するにはchomp関数を使用する

例)

chomp($data_line);

文字列の分割split関数

文字列を指定のパターンで分割する。

例)カンマ区切りのデータを分割する

my $line = "a,b,c";
@linelist = split(/,/, $line);

例)カンマ区切りのデータを分割して2個目のデータを取得する。

my $line = "a,b,c";
$var = (split(/,/, $line))[1];

文字列から1文字ずつ取得する

文字列から1文字ずつ取得するにはsplit関数を使用して配列に格納する。

例)

my $str = "Hello"
my @chars = split(//, $str);

foreach my $char (@chars) {
    print "$char\n";
}
# 結果
#H
#e
#l
#l
#o

引用符「""」を考慮してデータを分割する quotewords関数

ダブルクォーテーションや区切り文字を考慮して、テキストを行や配列に解析するPerlの標準モジュール

カンマ区切りのデータに"a,b,c"の様なデータがありspritで正しく分割できないときに使用する。

use Text::ParseWords;
my $line = 'aaa,bbb,"ccc,ddd",eee';
my @words = quotewords(',', 0, $line);
# 結果: @words = ('aaa', 'bbb', 'ccc,ddd', 'eee')

日付

日付の取得-strftime関数

例)

use POSIX 'strftime';
my $date = strftime("%Y%m%d", localtime); #YYYMMDD 形式で取得
print $date;
# 結果: 20260506

参考

Perl の公式ドキュメント
https://perldoc.jp/

open関数
https://perldoc.jp/func/open

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?